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