Minimum Swaps to Group All 1's Together II - Problem

A swap is defined as taking two distinct positions in an array and swapping the values in them.

A circular array is defined as an array where we consider the first element and the last element to be adjacent.

Given a binary circular array nums, return the minimum number of swaps required to group all 1's present in the array together at any location.

Input & Output

Example 1 — Basic Circular Array
$ Input: nums = [0,1,0,1,1,0,0]
Output: 1
💡 Note: There are 3 ones total. We need a window of size 3. The best window is [1,1,0] which has only 1 zero, so we need 1 swap to group all 1's together.
Example 2 — All Ones Already
$ Input: nums = [1,1,1,1]
Output: 0
💡 Note: All elements are already 1's, so no swaps are needed to group them together.
Example 3 — Circular Wrapping
$ Input: nums = [1,0,0,0,1]
Output: 1
💡 Note: There are 2 ones. Due to circular nature, we can group them as [1,1] by using positions 0 and 4, requiring 1 swap.

Constraints

  • 1 ≤ nums.length ≤ 105
  • nums[i] is either 0 or 1

Visualization

Tap to expand
Minimum Swaps to Group All 1's Together (Circular)Input: [0,1,0,1,1,0,0] → Output: 10101100CircularArrayTotal 1's = 3, so window size = 3Best window: [1,1,0]Only 1 zero → 1 swap neededMinimum Swaps: 1Slide window around circular array to find minimum zeros
Understanding the Visualization
1
Input Array
Binary circular array [0,1,0,1,1,0,0] with 3 ones
2
Find Optimal Window
Window size = 3, find position with minimum zeros
3
Count Swaps
Minimum zeros in any window = minimum swaps needed
Key Takeaway
🎯 Key Insight: Use sliding window of size equal to total 1's count to efficiently find optimal grouping position
Asked in
Facebook 25 Amazon 20 Google 15
28.5K Views
Medium Frequency
~25 min Avg. Time
892 Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen