其实这道题跟上一道完全一样啊,只不过每次sum都有意义了。每次算出一个sum,看看跟target之间的差距是不是缩小了,缩小了就更新一下解。
class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
int res = 0x7fffffff, min_delta = 0x7fffffff;
if(num.size()<=2)
return res;
sort(num.begin(), num.end());
for(int i=0;i<num.size()-2;i++){
int j = i+1;
int k = num.size()-1;
while(j<k){
if(j>i+1&&num[j] == num[j-1]) {j++;continue;}
if(k<num.size()-1 && num[k] == num[k+1]) {k--;continue;}
int sum = num[i]+num[j]+num[k];
if(abs(sum-target)<min_delta){
min_delta = abs(sum - target);
res = sum;
if(min_delta == 0)
return res;
}
if(sum>target) k--;
else if(sum<target) j++;
}
}
return res;
}
};