Program to find minimum swaps needed to group all 1s together in Python

PythonServer Side ProgrammingProgramming

Suppose we have a binary string, we have to find the minimum number of swaps needed to group all 1’s together in any place in the string. So if the input is like "10101001101", then the output will be 3, as possible solution is "00000111111".

To solve this, we will follow these steps −

  • data := a list of bits from the given string

  • set one := 0, n:= length of data array

  • make an array summ of size n, and fill this with 0, set summ[0] := data[0]

  • one := one + data[0]

  • for i in range 1 to n – 1

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

    • one := one + data[i]

  • ans := one

  • left := 0, right := one – 1

  • while right < n

    • if left is 0, then temp := summ[right], otherwise temp := summ[right] –

    • summ[left - 1]
    • ans := minimum of ans, one – temp

    • increase right and left by 1

  • return ans

Let us see the following implementation to get better understanding −

Example

 Live Demo

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"))

Input

"10101001101"

Output

3
raja
Published on 08-Oct-2020 14:31:54
Advertisements