Q16. 3Sum Closest
For example, given array S = {-1 2 1 -4}, and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).分析
C++代码
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int res = nums[0] + nums[1] + nums[2];
for(int cen = 0; cen < nums.size(); cen++){
int left = cen - 1;
int right = cen + 1;
int sum = nums[left] + nums[cen] + nums[right];
while( (left >= 0) && (right <= nums.size()-1)){
sum = nums[left] + nums[cen] + nums[right];
if(sum > target){
if(abs(target-sum)<abs(res-target)) res = sum;
if(left > 0) left--;
else break;
}
else if(sum < target){
if(abs(target-sum)<abs(res-target)) res = sum;
if (right < nums.size()-1) right++;
else break;
}
else return target;
}
}
return res;
}
};Last updated