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

Pythonでリストのすべてのアイテムを0にするために反転できる最小k長のサブリストをカウントするプログラム


0と1を格納したnumsと呼ばれる数値のリストがあるとします。別の値kがあります。

ここで、すべての1が0になり、すべての0が1になるように、長さkのサブリストを反転する操作があるとします。 numsをすべて1から0に変更するために必要な操作の最小数を見つける必要があります。変更できない場合は-1を返します。

したがって、入力がnums =[1,1,1,0,0,1,1,1]、k =3のような場合、最初の3つの数値をゼロに反転してから、出力は2になります。最後の3つの数字をゼロに反転します。

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

  • n:=numsのサイズ

  • res:=0、反転:=0

  • to_conv:=サイズnのリストで0を入力

  • 0からnの範囲のiの場合、実行

    • 反転:=反転XOR to_conv [i]

    • cur:=nums [i]

    • cur:=curXORが反転しました

    • curが1と同じ場合、

      • 反転:=反転XOR 1

      • res:=res + 1

      • i + k-1> =nの場合、

        • -1を返す

      • i + k

        • to_conv [i + k]:=1

  • 解像度を返す

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

class Solution:
   def solve(self, nums, k):
      n = len(nums)
      res = 0
      flipped = 0
      to_conv = [0] * n
      for i in range(n):
         flipped ^= to_conv[i]
         cur = nums[i]
         cur ^= flipped
         if cur == 1:
            flipped ^= 1
            res += 1
            if i + k - 1 >= n:
               return -1
            if i + k < n:
               to_conv[i + k] = 1
      return res
ob = Solution()
nums = [1,1,1,0,0,1,1,1]
k = 3
print(ob.solve(nums, k))

入力

[1,1,1,0,0,1,1,1], 3

出力

2

  1. Pythonのアイテムリストのすべての順列のすべての特別な値の平均をカウントするプログラム

    次のアルゴリズムでSの値を計算できる要素のリストがあるとします。 while size of L > 1 is non-zero, do    a := L[0]    b := L[1]    remove L[1]    L[0] := a + b + a*b return L[0] mod (10^9 + 7) ここでは、Lのすべての可能な組み合わせから計算されたすべてのS値の平均を見つける必要があります。 したがって、入力がL =[5,3,4]の場合、出力は199になります。これは、Lのすべての順

  2. Pythonのすべての異なるコースをカバーするために最小学期を数えるプログラム

    番号nがあるとすると、1からnまでのラベルが付けられたn個の異なるコースがあることを示します。また、relations [i]にペア(prevCourse_i、nextCourse_i)が含まれる、relationsという配列もあります。これは、コースprevCourse_iとコースnextCourse_iの間の前提条件の関係を表します。したがって、コースprevCourse_iはコースnextCourse_iの前に取得する必要があります。そして、私たちが持っている最後のパラメータはkです。 1学期では、前の学期に受講しているコースのすべての前提条件を満たしている限り、最大k個のコースを受講で