Pythonで最小AとAのサイズの積が最大になるサブリストのサイズを見つけるプログラム
numsと呼ばれる数値のリストと別の値posがあるとします。 (Aの最小値)*(Aのサイズ)が最大化されるようなインデックスposを含むnumsのサブリストAを見つけて、値を返す必要があります。
したがって、入力がnums =[-2、2、5、4] pos =3の場合、(5、4)=4であり、(5、4)=4であるため、最適なサブリストは[5、4]であるため、出力は8になります。サイズは2で、4 * 2=8です。
これを解決するには、次の手順に従います-
-
ans:=A [pos]、m:=A [pos]
-
i:=pos、j:=pos
-
0からA-1のサイズの範囲のiに対して、次の手順を実行します。
-
ansを返す
例
理解を深めるために、次の実装を見てみましょう-
class Solution: def solve(self, A, pos): NINF = float("-inf") ans = m = A[pos] i = pos j = pos for _ in range(len(A) - 1): left = A[i - 1] if i - 1 >= 0 else NINF right = A[j + 1] if j + 1 < len(A) else NINF if left >= right: i -= 1 m = min(m, A[i]) else: j += 1 m = min(m, A[j]) ans = max(ans, m * (j - i + 1)) return ans ob = Solution() nums = [-2, 2, 5, 4] pos = 3 print(ob.solve(nums, pos))
入力
[-2, 2, 5, 4], 3
出力
8
-
Pythonで石をマージするための最小コストを見つけるためのプログラム
N個の石の山が一列に並んでいると仮定します。ここで、i番目の山には石[i]個の石があります。移動は、K個の連続する杭を1つの杭にマージすることで構成されます。この移動のコストは、これらのK個の杭の石の総数に等しくなります。石のすべての山を1つの山にマージするための最小コストを見つける必要があります。そのような解決策がない場合は、-1を返します。 したがって、入力がnums =[3,2,4,1]、K =2のような場合、最初は[3、2、4、1]であるため、出力は20になります。次に、[3、2]をコスト5とマージすると、[5、4、1]が得られます。その後、[4、1]をコスト5とマージし、[5、5]
-
グラフ内の最大のクリークの最小サイズを見つけるプログラム(Python)
グラフが与えられ、グラフ内の最大のクリークの最小サイズを見つけるように求められたとします。グラフのクリークは、頂点のすべてのペアが隣接している、つまり頂点のすべてのペアの間にエッジが存在するグラフのサブセットです。グラフ内で最大のクリークを見つけることは多項式時間では不可能であるため、小さなグラフのノードとエッジの数を考えると、グラフ内の最大のクリークを見つける必要があります。 したがって、入力がノード=4、エッジ=4のような場合。その場合、出力は2になります。 上のグラフでは、クリークの最大サイズは2です。 これを解決するには、次の手順に従います- 関数helper()を定義し