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

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に対して、次の手順を実行します。

    • left:=A [i --1] if i --1>=0それ以外の場合-inf

    • right:=A [j + 1] if j +1

    • 左>=右の場合、

      • i:=i-1

      • m:=mとA[i]

        の最小値
    • それ以外の場合

      • j:=j + 1

      • m:=mとA[j]

        の最小値
    • ans:=ansの最大値と(m *(j --i + 1))

  • 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

  1. 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]

  2. グラフ内の最大のクリークの最小サイズを見つけるプログラム(Python)

    グラフが与えられ、グラフ内の最大のクリークの最小サイズを見つけるように求められたとします。グラフのクリークは、頂点のすべてのペアが隣接している、つまり頂点のすべてのペアの間にエッジが存在するグラフのサブセットです。グラフ内で最大のクリークを見つけることは多項式時間では不可能であるため、小さなグラフのノードとエッジの数を考えると、グラフ内の最大のクリークを見つける必要があります。 したがって、入力がノード=4、エッジ=4のような場合。その場合、出力は2になります。 上のグラフでは、クリークの最大サイズは2です。 これを解決するには、次の手順に従います- 関数helper()を定義し