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

Pythonでkビットを反転して1の最長セットの長さを見つけるプログラム


バイナリリストがあるとすると、ここでは1と0のみが使用可能であり、別の数値kもあります。最大でk0を1に設定できます。すべての1を含む、最長のサブリストの長さを見つける必要があります。

したがって、入力がnums =[0、1、1、0、0、1、1] k =2の場合、2つの中央の0を1に設定すると、リストは次のようになります。 [0、1、1、1、1、1、1]。

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

  • ゼロ:=0、ans:=0、j:=0
  • 各インデックスiおよびnumsの値nについて、実行します
    • ゼロ:=ゼロ+(nが0と同じ場合は1、それ以外の場合は0)
    • ゼロ>kの場合、do
      • zeros:=zeros-(nums [j]が0と同じ場合は1、それ以外の場合は0)
      • j:=j + 1
    • i --j + 1> ansの場合、
      • ans:=i --j + 1
  • 回答を返す

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

class Solution:
   def solve(self, nums, k):
      zeros = 0
      ans = 0
      j = 0
      for i, n in enumerate(nums):
         zeros += n == 0
         while zeros > k:
            zeros -= nums[j] == 0
            j += 1
         if i - j + 1 > ans:
            ans = i - j + 1
      return ans
ob = Solution()
nums = [0, 1, 1, 0, 0, 1, 1]
k = 2
print(ob.solve(nums, k))

入力

[0, 1, 1, 0, 0, 1, 1], 2

出力

6

  1. Pythonで連続して増加する最長の部分文字列の長さを見つけるプログラム

    小文字の文字列sがあるとします。これには、英語の文字と「?」が含まれますシンボル。 「?」ごとに削除するか、小文字に置き換える必要があります。文字「a」で始まる、連続して増加する最長の部分文字列の長さを見つける必要があります。 したがって、入力がs =vta ??? defkeの場合、出力は6になります。これは、sを vtabcdefkeに変換でき、 abcdefは、連続して増加する最長の部分文字列であり、これも次のように始まります。 「a」。 これを解決するには、次の手順に従います- maxlen:=0 長さ:=0 qmarks:=0 sの各cについて、 cが「?」と同じ

  2. Pythonのn-aryツリーで最長のパスの長さを見つけるプログラム

    各アイテムが保持しているエッジリスト(u、v)があり、uがvの親であることを表しているとします。ツリー内で最も長いパスの長さを見つける必要があります。パスの長さは、1+そのパス内のノードの数です。 したがって、入力が次のような場合 パスが[1、4、5、7]であり、合計4つのノードがあるため、出力は5になります。したがって、パスの長さは1 + 4=5です。 これを解決するには、次の手順に従います- g:=指定されたエッジリストからのグラフの隣接リスト d:=新しい地図 関数bfs()を定義します。これには時間がかかります d [o]:=1 f:=o q:=[o]