![]() |
VOOZH | about |
Given a binary array, the task is to find the minimum number of swaps needed to sort this binary array. We are allowed to swap only adjacent elements.
Examples:
Input : arr[] = [0, 0, 1, 0, 1, 0, 1, 1]
Output : 3
Explanation:
1st swap : [0, 0, 1, 0, 0, 1, 1, 1]
2nd swap : [0, 0, 0, 1, 0, 1, 1, 1]
3rd swap : [0, 0, 0, 0, 1, 1, 1, 1]
Input : arr[]= [0, 0, 0, 1, 1]
Output : 0
Explanation: Array is already sorted.
Approach:
Since a sorted binary array would have all 0s followed by all 1s, we can process the array from right to left and calculate how many positions each 1 needs to travel through to reach its correct position. The count of positions for a 1 would be equal to number of zeros on right side of it.
Step by step approach:
Illustration:
Taking example of arr[] = [0, 0, 1, 0, 1, 0, 1, 1]:
- Position 7: Element is 1, zero count = 0, swaps = 0
- Position 6: Element is 1, zero count = 0, swaps = 0
- Position 5: Element is 0, zero count = 1, swaps = 0
- Position 4: Element is 1, zero count = 1, swaps = 1
- Position 3: Element is 0, zero count = 2, swaps = 1
- Position 2: Element is 1, zero count = 2, swaps = 3
- Position 1: Element is 0, zero count = 3, swaps = 3
- Position 0: Element is 0, zero count = 4, swaps = 3 + 0 = 3
3
Time Complexity: O(n)
Auxiliary Space: O(1)
Now try the below question yourself
What would be the count when we can swap any 0 with any 1?