Skip to main content
Back to problems
#1151
Medium Algorithms

Minimum swaps to group all 1s together

Array Sliding Window
61.2% acceptance
Mar 31, 2026
1279
18
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.

Solution

Rust
Time O(n)
Space O(1)
LeetCode
solution.rs
impl Solution {
  pub fn min_swaps(data: Vec<i32>) -> i32 {
    let ones: i32 = data.iter().sum();
    if ones <= 1 {
      return 0;
    }
    let k = ones as usize;
    let mut zeros_in_window: i32 = data[..k].iter().filter(|&&x| x == 0).count() as i32;
    let mut min_swaps = zeros_in_window;
    for i in k..data.len() {
      zeros_in_window += (1 - data[i]);
      zeros_in_window -= (1 - data[i - k]);
      min_swaps = min_swaps.min(zeros_in_window);
    }
    min_swaps
  }
}