Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで捕まえることができる雨の総量を見つけるためのプログラム


n個の非負の整数の配列があるとします。これらは、各バーの幅が1である高さを表しており、雨が降った後にどれだけの水を捕まえることができるかを計算する必要があります。したがって、マップは次のようになります-

Pythonで捕まえることができる雨の総量を見つけるためのプログラム

ここでは、8つの青いボックスがあることがわかります。したがって、出力は8になります。

これを解決するには、次の手順に従います-

  • スタックst、water:=0およびi:=0を定義します
  • whilei<身長のサイズ
    • スタックが空またはheight[stacktop]> =height [i]の場合、iをスタックにプッシュし、iを1増やします
    • それ以外の場合
      • x:=スタックトップ要素、スタックからトップを削除
      • スタックが空でない場合は、
        • temp:=高さの最小値[スタックトップ要素]と高さ[i]
        • dest:=i –ス​​タックトップ要素– 1
        • 水:=水+距離*(temp – height [x])
  • 水を戻す

理解を深めるために、次の実装を見てみましょう-

class Solution(object):
   def trap(self, height):
      stack = []
      water = 0
      i=0
      while i<len(height):
         if len(stack) == 0 or height[stack[-1]]>=height[i]:
            stack.append(i)
            i+=1
         else:
            x = stack[-1]
            stack.pop()
            if len(stack) != 0:
               temp = min(height[stack[-1]],height[i])
               dist = i - stack[-1]-1
               water += dist*(temp - height[x])
      return water
ob = Solution()
print(ob.trap([2,5,2,0,5,8,8]))

入力

[2,5,2,0,5,8,8]

出力

8

  1. Pythonで行列の空のセルを選択できる方法がいくつあるかを確認するプログラム

    N x Nのバイナリ行列があり、0は空のセル、1はブロックされたセルであるとすると、すべての行とすべての列に少なくとも1つの選択されたセルがあるように、N個の空のセルを選択する方法の数を見つける必要があります。答えが非常に大きい場合は、結果mod 10 ^ 9 + 7を返します。 したがって、入力が次のような場合 0 0 0 0 0 0 0 1 0 次の構成があるため、出力は4になります(xは選択されたセルです)- これを解決するには、次の手順に従います- n:=行列のサイズ 関数f()を定義します。これ

  2. Pythonで範囲内のノード数を見つけるプログラム

    BSTがあり、左と右の境界lとrもあるとすると、lとrの間に値が存在するルート内のすべてのノードの数を見つける必要があります。 したがって、入力が次のような場合 l =7、r =13の場合、8、10、12の3つのノードがあるため、出力は3になります。 これを解決するために、次の手順に従います- スタック:=スタックと最初にルートを挿入し、カウント:=0 スタックが空でないときに、実行します node:=スタックの最上位要素、およびポップ要素 ノードがnullでない場合、 l<=ノードのデータ<=rの場合、 count:=count + 1