Leetcode 1151 - Minimum Swaps to Group All 1's Together
Understanding the problem
Given an array data of integers, we are asked to group all 1’s together and minimize the number of swaps required to do so.
Grow Your Tech Career. Meet Expert coaches from top companies
Plan your solution
One approach to solve this problem is to first count the number of 1’s in the array, and then iterate through the array keeping track of the number of 1’s seen so far. For each element in the array, if it is a 1 we increment the count of 1’s seen so far, and if it is not a 1 we decrement the count. We also keep track of the maximum count of 1’s seen so far and the number of swaps needed to move all 1’s to the left side of the array.
Implement your solution
def minSwaps(data):
n = len(data)
ones = data.count(1) # counting the number of 1's in the array
left_ones = data[:ones].count(1) # counting the number of 1's in the first 'ones' elements of the array
max_ones = left_ones # initializing max_ones with left_ones
swaps = ones - left_ones #initializing the number of swaps required
for i in range(ones, n): # iterating through the array from 'ones' index till the end
if data[i] == 1:
left_ones += 1 # incrementing left_ones if current element is 1
if data[i-ones] == 1:
left_ones -= 1 #decrementing left_ones if current element is not 1
max_ones = max(max_ones, left_ones) # keeping track of maximum number of 1's seen so far
swaps = min(swaps, ones - max_ones) # keeping track of number of swaps required
return swaps
Test your solution
Let’s test our solution with the example input:
data = [1, 0, 1, 0, 1]
print(minSwaps(data))
Output: 2
As we can see, the output is correct and matches the expected output.
In summary, we have successfully implemented a solution to Leetcode Problem 1151 by counting the number of 1’s in the array and then iterating through the array keeping track of the number of 1’s seen so far. We also kept track of the maximum count of 1’s seen so far and the number of swaps needed to move all 1’s to the left side of the array. We also used sliding window approach and kept track of number of 1’s seen in the current window. This approach has a time complexity of O(n) and a space complexity of O(1), where n is the size of the input array.