虽然是暴力求解,但是要尽量把value的搜索范围压倒最小。
现象1:value越大,整体sum一定越大
现象2:target/arr.size()一定是value能取到的最小值,并且sum<target
现象3: 随着value的增大,sum也是越来越大,但是当sum超越targte时候,就是应该结束判断的时候了。
class Solution {
public:
//
int findBestValue(vector<int>& arr, int target) {
int mindiff = 1e9+7;
int minvalue = 0;
int value = target/arr.size();
while(1){
// gain all sum
int sum = 0;
for(int i=0;i<arr.size();i++){
if (arr[i]>=value){
sum+=value;
}
else{
sum+=arr[i];
}
}
if (target==sum){
return value;
}
else{
int diff = abs(target-sum);
if (diff<mindiff){
mindiff = diff;
minvalue = value;
}
}
if (target<sum){break;}
value ++;
}
return minvalue;
}
};