Minimum Swaps to Group All 1's Together in Python

PythonServer Side ProgrammingProgramming

Suppose we have a binary array data, we have to find the minimum number of swaps required to group all 1’s stored in the array together in any place in the array. So if the array is like [1,0,1,0,1,0,0,1,1,0,1], then the output will be 3, as possible solution is [0,0,0,0,0,1,1,1,1,1,1]

To solve this, we will follow these steps −

  • 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

Example(Python)

Let us see the following implementation to get better understanding −

 Live Demo

class Solution(object):
   def minSwaps(self, 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.minSwaps([1,0,1,0,1,0,0,1,1,0,1]))

Input

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

Output

3
raja
Published on 17-Mar-2020 10:16:58
Advertisements