这道题和前面一题的主要思路类似,主要是多了个判断相差值的比较大小。
下面附上代码
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int n = nums.size();
sort(nums.begin(),nums.end());
int best = 1e7;
auto update = [&](int cur){
if(abs(cur - target) < abs(best - target)){//比较每一个相加的值与target相差多少
best = cur;
}
};
for(int i = 0;i < n;i++){
if(i > 0 && nums[i] == nums[i - 1])continue;//跳过重复的数
int j = i + 1,k = n - 1;
while(j < k){
int sum = nums[i] + nums[j] + nums[k];
if(sum == target)return target;
update(sum);
if(sum > target){
k--;
while(j < k && nums[k] == nums[k + 1])k--;
}
if(sum < target){
j++;
while(j < k && nums[j] == nums[j - 1])j++;
}
}
}
return best;
}
};