#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)
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
}
}