Minimum Swaps to Group All 1's Together
Given a binary array data, return the minimum number of swaps required to group all 1’s present in the array together in any place in the array.
Example 1:
Input: data = [1,0,1,0,1]
Output: 1
Explanation: There are 3 ways to group all 1's together:
[1,1,1,0,0] using 1 swap.
[0,1,1,1,0] using 2 swaps.
[0,0,1,1,1] using 1 swap.
The minimum is 1.
Example 2:
Input: data = [0,0,0,1,0]
Output: 0
Explanation: Since there is only one 1 in the array, no swaps are needed.
Example 3:
Input: data = [1,0,1,0,1,0,0,1,1,0,1]
Output: 3
Explanation: One possible solution that uses 3 swaps is [0,0,0,0,0,1,1,1,1,1,1].
Constraints:
1 <= data.length <= 105data[i]is either0or1.
Explanation
Let count1 be the total number of 1s in data. In the final arrangement, all 1s must occupy one contiguous block of length count1, because there are exactly count1 ones to place.
So the problem becomes: among all windows of length count1, which window is best to turn into that block? A swap is only needed for each 0 inside the chosen window (swap it with a 1 outside), so we want the window with the fewest 0s, or equivalently the most 1s.
Use a fixed-size sliding window. Keep total as the number of 1s in the current window. Initialize it for the first count1 elements, then slide right by adding the new element and removing the element that left the window. For every window, required swaps are count1 - total. Track the minimum of this value.
This gives an O(n) solution with O(1) extra space.
Implementation
def minSwaps(self, data):
count1 = data.count(1)
total = 0
for i in range(count1): total += data[i]
swaps = count1-total
for r in range(count1, len(data)):
total += data[r]
total -= data[r-count1]
swaps = min(swaps, count1-total)
return swaps
Ready to land your dream job?
Unlock your dream job with a 5-minute evaluator for a personalized learning plan!
Start EvaluatorHow does quick sort divide the problem into subproblems?
Recommended Readings
Coding Interview Patterns Your Personal Dijkstra's Algorithm to Landing Your Dream Job The goal of AlgoMonster is to help you get a job in the shortest amount of time possible in a data driven way We compiled datasets of tech interview problems and broke them down by patterns This way
Recursion If you prefer videos here's a video that explains recursion in a fun and easy way Recursion is one of the most important concepts in computer science Simply speaking recursion is the process of a function calling itself Using a real life analogy imagine a scenario where you invite your friends to lunch https assets algo monster recursion jpg You first call Ben and ask him
Runtime Overview When learning about algorithms and data structures you'll frequently encounter the term time complexity This concept is fundamental in computer science and offers insights into how long an algorithm takes to complete given a certain input size What is Time Complexity Time complexity describes how the time needed
Want a Structured Path to Master System Design Too? Don’t Miss This!