Skip to main content
Back to problems
#2137
Medium Algorithms

Pour water between buckets to make water levels equal

Array Binary Search
68.4% acceptance
Mar 31, 2026
117
10

No description available.

Solution

Rust
Time O(n²)
Space O(1)
LeetCode
solution.rs
impl Solution {
  pub fn equalize_water(buckets: Vec<i32>, loss: i32) -> f64 {
    let keep = 1.0 - loss as f64 / 100.0;
    let mut lo = 0.0f64;
    let mut hi = *buckets.iter().max().unwrap() as f64;

    for _ in 0..100 {
      let mid = (lo + hi) / 2.0;
      let mut surplus = 0.0f64;
      let mut deficit = 0.0f64;
      for &b in &buckets {
        let b = b as f64;
        if b > mid {
          surplus += b - mid;
        } else {
          deficit += mid - b;
        }
      }
      if surplus * keep >= deficit {
        lo = mid;
      } else {
        hi = mid;
      }
    }

    lo
  }
}