Pythonで雨水をトラップする
n個の非負の整数の配列があるとします。これらは、各バーの幅が1である標高マップを表しており、雨が降った後にトラップできる水量を計算する必要があります。したがって、マップは次のようになります-
ここでは、6つの青いボックスがあることがわかります。したがって、出力は6になります。
これを解決するには、次の手順に従います-
-
スタックst、water:=0およびi:=0
を定義します -
私は<身長のサイズ
-
スタックが空または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([0,1,0,2,1,0,1,3,2,1,2,1]))
入力
[0,1,0,2,1,0,1,3,2,1,2,1]
出力
6
-
Pythonで最も水が多いコンテナ
n個の非負の整数a1、a2、...、anのセットがあり、各値は座標(i、a [i])の点を表しているとします。 n本の垂直線は、線iの2つの端点が(i、a [i])と(i、a [0])にあるように存在します。 x軸と一緒に1つのコンテナを形成する2つの線を見つける必要があるため、水量が最大になる2つの列を見つけることが目標です。したがって、配列が[1,8,6,2,5,4,8,3,7]の場合、次のようになります 影付きの部分では、高さが7で、セクションが7つあるため、合計面積は実際には7 * 7=49です。これが出力です。 これを解決するために、次の手順に従います 低:=0、高:=a
-
Pythonでのスタックおよびキューとしてのリストの使用
この記事では、Python3.xのスタックとキューの構造について学習します。またはそれ以前。ここでは、これらのデータ構造内での動作と変更について説明します- これには-が含まれます 挿入操作(プッシュ、エンキュー) 削除操作(ポップ、デキュー) 表示/トラバース操作 前提条件 :リストとリスト操作 関連データ構造 :リスト操作 関連画像 スタック スタックでは、オブジェクトは互いに重ねて格納され、これらのオブジェクトは到着の逆の順序で削除されます。つまり、LIFOの概念に従います。 LIFOは、スタックデータ構造で後入れ先出しタイプの配置に従うことを意味します。 スタックで