程序查找在Python中将所有1组合在一起所需的最小交换

假设我们有一个二进制字符串,我们必须找到在字符串的任何位置将所有1组合在一起的最小交换次数。因此,如果输入类似于“ 10101001101”,那么输出将为3,可能的解决方案是“ 00000111111”。

为了解决这个问题,我们将遵循以下步骤-

  • data:=给定字符串的位列表

  • 设置一个:= 0,n:=数据数组的长度

  • 设置大小为n的数组总和,并用0填充,设置summ [0]:= data [0]

  • 一:=一+数据[0]

  • 当我在1到n – 1的范围内时

    • summ [i]:= summ [i-1] + data [i]

    • 一个:=一个+数据[i]

  • 回答:=一个

  • 左:= 0,右:= 1 – 1

  • 而右<n

    • 如果left为0,则temp:= summ [right],否则temp:= summ [right] –

    • summ [左-1]

    • ans:= ans的最小值,一个– temp

    • 左右增加1

  • 返回ans

让我们看下面的实现以更好地理解-

示例

class Solution(object):
   def solve(self, data):
      data = list(map(int, list(data)))
      one = 0
      n = len(data)
      summ=[0 for i in range(n)]
      summ[0] = data[0]
      one += data[0]
      for i in range(1,n):
         summ[i] += summ[i-1]+data[i]
         one += data[i]
      ans = one
      left = 0
      right = one-1
      while right <n:
         if left == 0:
            temp = summ[right]
         else:
            temp = summ[right] - summ[left-1]
         ans = min(ans,one-temp)
         right+=1
         left+=1
         return ans
ob = Solution()print(ob.solve("10101001101"))

输入值

"10101001101"

输出结果

3
猜你喜欢