1626. Salary Adjustment
class Solution {
public:
/**
* @param a: the list of salary
* @param target: the target of the sum
* @return: the cap it should be
*/
int getCap(vector<int> &a, int target) {
// Write your code here.
int sum = 0;
int minV = INT_MAX;
for(int i = 0; i < a.size(); i++){
sum += a[i];
minV = min(minV, a[i]);
}
// binary search
if(sum >= target){
return minV;
}
int start = minV;
int end = target / a.size() + 1;
while(start + 1 < end){
int mid = start + (end - start) / 2;
int adjSum = getSum(a, mid);
if(adjSum <= target){
start = mid;
}
else{
end = mid;
}
}
if(getSum(a, start) >= target){
return start;
}
else{
return end;
}
}
int getSum(vector<int> &a, int cap){
int sum = 0;
for(auto i : a){
sum += (i >= cap ? i : cap);
}
return sum;
}
};
Comments
Post a Comment