Minimum Swaps to Group All 1's Together in Python


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

Updated on: 30-Apr-2020

206 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements