本题源自LeetCode
------------------------------------------------------------------
思路:
1 对数组进行排序,遍历数组,依次从当前位置开始,用快排的思想找出俩个数和目标最近
2 遍历整个数组,找出最接近的那个
代码:
int threeSumClosest(vector<int> &num, int target) {
if(num.size()<3)
return accumulate(num.begin(),num.end(),0);
int result=num[0]+num[1]+num[2]; //初始化 result 为 数组的前三个数的和
sort(num.begin(),num.end()); //排序
for(int i=0;i<num.size()-2;i++){
int start=i+1;
int end=num.size()-1;
while(start<end){
int sum=num[i]+num[start]+num[end];
if(abs(sum-target)<abs(result-target)){
result=sum;
if(result==target)
return result;
}
sum > target ? end--:start++;
}
while(i<num.size()-1&&num[i+1]==num[i])
i++;
}
return result;
}