1300 Sum of mutated array closest to target
https://leetcode.com/problems/sum-of-mutated-array-closest-to-target/
class Solution {
public int findBestValue(int[] arr, int target) {
//傻逼,不一定是arr里的value
int hi = arr[0];
for (int num : arr) {
hi = Math.max(num, hi);
}
int lo = 0;
while (lo + 1 < hi) {
int mid = lo + (hi - lo) / 2;
int sum = getSum(arr, mid);
if (sum == target) {
return mid;
}
if (sum < target) {
lo = mid;
} else {
hi = mid;
}
}
int loSum = getSum(arr, lo);
int hiSum = getSum(arr, hi);
// System.out.println(lo);
// System.out.println(hi);
if (Math.abs(target - loSum) <= Math.abs(target - hiSum)) {
return lo;
}
return hi;
}
private int getSum(int[] arr, int ele) {
int sum = 0;
for (int num : arr) {
if (num <= ele) {
sum += num;
} else {
sum += ele;
}
}
return sum;
}
}
真尼玛弱智,只需要记得可以用binary search因为diff是从负到正递增的我们要找到最接近0点的值
以及it's expected to 对每个mid都算一遍sum
Last updated