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

Pythonでリストのバランスをとるために両端から必要な削除の最小数を見つけるプログラム


0と1を含むリストがあるとすると、リストの前または後ろから値を削除する必要があります。最後に、残りのリストの0と1の数が等しくなるように、必要な削除の最小数を見つける必要があります。

したがって、入力がnums =[1、1、1、0、0、1]の場合、出力は2になります。これは、最初の1と最後の1を削除して、2つの1と2つの0を作成できるためです。 。

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

  • 最長:=0
  • d:=キー0に値-1を入力したマップ
  • currSum:=0
  • 0からnumsのサイズの範囲のiの場合は、
    • nums [i]が0と同じ場合、
      • currSum:=currSum-1
    • それ以外の場合、
      • currSum:=currSum + 1
    • currSumがdにある場合、
      • longest:=最長の最大値とi --d [currSum]
    • それ以外の場合、
      • d [currSum]:=i
  • numsのサイズを返す-最長

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

class Solution:
   def solve(self, nums):
      longest = 0
      d = {0 : -1}
      currSum = 0
      for i in range(len(nums)):
         if nums[i] == 0:
            currSum -= 1
         else:
            currSum += 1
         if currSum in d:
            longest = max(longest, i - d[currSum])
         else:
            d[currSum] = i
      return len(nums) - longest
ob = Solution()
nums = [1, 1, 1, 0, 0, 1] print(ob.solve(nums))

入力

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

出力

2

  1. Pythonで1つの文字列を他の文字列のサブ文字列にするために必要な最小数の操作を見つけるプログラム

    2つの文字列sとtがあるとすると、sがtをsの部分文字列にするために必要な操作の最小量を見つける必要があります。これで、各操作で、s内の任意の位置を選択し、その位置の文字を他の任意の文字に変更できます。 したがって、入力がs =abbpqr、t =bbxyの場合、サブストリング bbpqを取得して、pをxに、qをに変更できるため、出力は2になります。 y。 これを解決するには、次の手順に従います- k:=tのサイズ、n:=sのサイズ ans:=10 ^ 10 0からn-kの範囲のiの場合、do ss:=s[インデックスiからi+k-1へ]の部分文字列 ans:=最小のans

  2. Pythonで2つの文字列を等しくするために必要な前処理移動の最小数を見つけます

    同じ長さで小文字のみの2つの文字列PとQがあるとすると、以下の操作を適用した後、文字列Pを文字列Qと等しくするために必要な、文字列Pの前処理移動の最小数をカウントする必要があります- 任意のインデックスiを選択し、文字piとqiを入れ替えます。 任意のインデックスiを選択し、文字piとpn – i –1を入れ替えます。 任意のインデックスiを選択し、文字qiとqn – i –1を入れ替えます。 注 −範囲内のiの値(0≤i