先使用快速排序算法让数组从小到大排序,遍历该数组,发现当前值大于“‘目标值target减去之前元素累加和的差’除以‘数组剩余元素的个数’”时,则返回“当前值之前的所有元素的平均值”。当第一个元素就大于“‘目标值target减去之前元素累加和的差’除以‘数组剩余元素的个数’”(这里等于目标值target除以数组的size),返回target/arrSize。
代码如下:
int cmp(const void* c1, const void* c2) {
return *(int*)c1 - *(int*)c2;
}
int findBestValue(int* arr, int arrSize, int target){
if (arr == NULL) {
return 0;
}
qsort(arr, arrSize, sizeof(int), cmp);
int sum = 0;
for (int i = 0; i < arrSize; i++) {
int x = (target - sum) / (arrSize - i);
if (x < arr[i]) {
double t = ((double)(target - sum))/(arrSize - i);
if (t - x > 0.5) {
return x + 1;
} else {
return x;
}
}
sum += arr[i];
}
return arr[arrSize - 1];
}