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

Let us see the following implementation to get better understanding −

class Solution(object):
   def minSwaps(self, data):
      """
      :type data: List[int]
      :rtype: int
      """
      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

Input

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

Output

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