Skip to main content

rustgym/leetcode/
_1300_sum_of_mutated_array_closest_to_target.rs

1struct Solution;
2
3impl Solution {
4    fn find_best_value(mut arr: Vec<i32>, mut target: i32) -> i32 {
5        arr.sort_unstable();
6        let n = arr.len();
7        let mut i = 0;
8        while i < n && target > arr[i] * (n - i) as i32 {
9            target -= arr[i];
10            i += 1;
11        }
12        if i == n {
13            return arr[n - 1];
14        }
15        let res = target / (n - i) as i32;
16        if (res + 1) * (n - i) as i32 - target < target - res * (n - i) as i32 {
17            res + 1
18        } else {
19            res
20        }
21    }
22}
23
24#[test]
25fn test() {
26    let arr = vec![4, 9, 3];
27    let target = 10;
28    let res = 3;
29    assert_eq!(Solution::find_best_value(arr, target), res);
30    let arr = vec![2, 3, 5];
31    let target = 10;
32    let res = 5;
33    assert_eq!(Solution::find_best_value(arr, target), res);
34    let arr = vec![60864, 25176, 27249, 21296, 20204];
35    let target = 56803;
36    let res = 11361;
37    assert_eq!(Solution::find_best_value(arr, target), res);
38}