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

PythonでK個のサブリストを増やした後に最小値を最大化するようにプログラムする


numsと呼ばれる数値のリストと2つの値、sizeとkがあるとします。ここで、長さサイズの連続したサブリストを取得し、すべての要素を1つずつインクリメントする操作があるとします。この操作はk回実行できます。可能な限り最大の最小値を、numsで見つける必要があります。

したがって、入力がnums =[2、5、2、2、7]、size =3、k =2の場合、[2、5、2]を増やして[を取得できるため、出力は3になります。 3、6、3、2、7]次に[6、3、2]をインクリメントして、[3、7、4、3、7]を取得します。最小値は3

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

  • 関数possible()を定義します。これはターゲットになります
  • events:=サイズNのリストで、0で埋めます
  • 移動:=0、s:=0
  • 0からNの範囲のiについては、
    • s:=s+イベント[i]
    • デルタ:=ターゲット-(A [i] + s)
    • デルタ>0の場合、
      • 移動:=移動+デルタ
      • s:=s+デルタ
      • i +サイズ
      • events [i + size]:=events [i + size] --delta
  • 移動するとtrueを返します<=K
  • メインの方法から、次の手順を実行します
  • N:=Aのサイズ
  • 左:=0、右:=10 ^ 10
  • 左<右、実行
    • mid:=(左+右+ 1)/ 2
    • 可能であれば(mid)、次に
      • 左:=中央
    • それ以外の場合、
      • 右:=半ば-1
  • 左に戻る
  • 理解を深めるために、次の実装を見てみましょう-

    class Solution:
       def solve(self, A, size, K):
          N = len(A)
       def possible(target):
          events = [0] * N
          moves = s = 0
          for i in range(N):
             s += events[i]
             delta = target - (A[i] + s)
             if delta > 0:
                moves += delta
                s += delta
                if i + size < N:
                   events[i + size] -= delta
                   return moves <= K
                   left, right = 0, 10 ** 10
                   while left < right:
                      mid = (left + right + 1)//2
                   if possible(mid):
                      left = mid
                   else:
                      right = mid - 1
          return left
    ob = Solution()
    nums = [2, 5, 2, 2, 7]
    size = 3
    k = 2
    print(ob.solve(nums, size, k))

    入力

    [2, 5, 2, 2, 7], 3, 2

    出力

    3

    1. Pythonを使用してバケット内のボール間の最小力を最大化するプログラム

      いくつかのバケットとx個のボールが与えられたとします。ボールをバケツに入れると、その中に特殊な力が作用し、2つのボール間の最小の力を最大化する方法を見つける必要があります。位置pとqのバケット内の2つのボール間の力は|p--q|です。私たちに与えられた入力は、バケットの位置とボールの数xを含む配列です。それらの間の最小の力を見つけなければなりません。 したがって、入力がpos =[2、4、6、8、10、12]、x =3の場合、出力は4になります。 ボールは、12個のバケットの配列で指定された位置に配置できます。 3つのボールは4、8、12の位置に配置でき、それらの間のパワーは4になり

    2. Pythonでマージした後も、最小数の色を見つけるプログラムが残っています

      色のリスト(R、G、B)があるとします。これで、2つの異なる色が隣り合っている場合、それらは3番目の色の単一の色のアイテムに変換できます。そのような変換の可能なシーケンスの後に残っているそれらの最小数を見つける必要があります。 したがって、入力がcolors =[G、 R、 G、 B、 R]の場合、以下のように変換できるため、出力は1になります- これを解決するには、次の手順に従います- n:=色のサイズ 色に異なる色が1つしかない場合は、 return n n <=1の場合、 return n x:=0 d:=キーと値のペアを持つマップ{( R、1)、(