diff --git a/src/problem/mod.rs b/src/problem/mod.rs index b39ec88..56fc404 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -480,3 +480,5 @@ mod p59_spiral_matrix_ii; mod p913_cat_and_mouse; mod p1728_cat_and_mouse_ii; + +mod p1760_minimum_limit_of_balls_in_a_bag; diff --git a/src/problem/p1760_minimum_limit_of_balls_in_a_bag.rs b/src/problem/p1760_minimum_limit_of_balls_in_a_bag.rs new file mode 100644 index 0000000..3887f5c --- /dev/null +++ b/src/problem/p1760_minimum_limit_of_balls_in_a_bag.rs @@ -0,0 +1,43 @@ +/** + * [1760] Minimum Limit of Balls in a Bag + */ +pub struct Solution {} + +// submission codes start here + +impl Solution { + pub fn minimum_size(nums: Vec, max_operations: i32) -> i32 { + let nums = nums.into_iter().map(|x| x as i64).collect::>(); + let max_operations = max_operations as i64; + let max_num = *nums.iter().max().unwrap(); + + let mut left = 1; // check(left) == false + let mut right = max_num; // check(right) == true + + // [left, right) + while left < right { + let middle = (right - left) / 2 + left; + if nums.iter().map(|x| (*x - 1) / middle).sum::() <= max_operations { + right = middle; // [left, middle) + } else { + left = middle + 1; // [middle + 1, right) + } + } + + left as i32 + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_1760() { + assert_eq!(2, Solution::minimum_size(vec![2, 4, 8, 2], 4)); + assert_eq!(3, Solution::minimum_size(vec![9], 2)); + assert_eq!(7, Solution::minimum_size(vec![7, 17], 2)); + } +}