题目:和上题思路类似,但是细节稍有区别。此题要求找到3个数的和最接近一个target,并且假设只有一个结果。比如我们找到了3个数之和正好==target,就可以结束了。
class Solution {
public:
int threeSumClosest(vector<int> &num, int target){
if(num.size()==3)
return num[0]+num[1]+num[2];
sort(num.begin(),num.end());//先排序。
int res=100000;
for(int i=0;i<num.size();++i){//两层循环
int start=i+1,end=num.size()-1;
while(start<end){
int sum=num[start]+num[end]+num[i];
int tmp=sum-target;
if(abs(tmp)<abs(res-target))
res=sum;//如果需要更新结果的话
if(tmp>0)
end--;
else if(tmp<0)
start++;
else {
res=target;
break;
}
}
if(res==target)
break;//如果正好找到和==target
}
return res;
}
};