题意:Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
思路:类似3Sum
AC代码
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int j = 0, ret=0;
while(j < 3){
ret += nums[j++];
}
if(nums.size() <= 3)
return ret;
sort(nums.begin(), nums.end());
for(int i = 0; i < nums.size()-2; ++i){
for(int p = i + 1, q = nums.size() - 1 ; p < nums.size() - 1 && p < q && q > i; ){
int sum = nums[i] + nums[p] + nums[q];
if(sum == target){
return target;
}else if(sum < target){
++ p;
}else{
-- q;
}
if( abs(sum - target) < abs(ret-target)){
ret = sum;
}
}
}
return ret;
}
};