1class Solution {2int max = 0;3int len;45public int findBestValue(int[] arr, int target) {6this.len = arr.length;78for (int i = 0; i < len; i++) max = Math.max(max, arr[i]);910int l = 0;11int r = max;12while (l < r) {13int mid = l + (r - l) / 2;1415if (check(arr, mid, target) <= check(arr, mid + 1, target)) r = mid;16else l = mid + 1;17}18return l;19}2021private int check(int[] arr, int value, int target) {22int sum = 0;23for (int e : arr) {24if (e > value) sum += value;25else sum += e;26}2728return Math.abs(sum - target);29}30}