最接近的三数之和
题目描述:
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
输入:
nums = [-1,2,1,-4], target = 1
输出:
2
解释:
与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
提示:
3 <= nums.length <= 10^3
-10^3 <= nums[i] <= 10^3
-10^4 <= target <= 10^4
int threeCloseSum(vector<int>&nums,int target){
int sz=nums.size();
int best = 1e7;
sort(nums.begin(),nums.end());
auto update=[&](int cur){
if(abs(cur-target)<abs(best-target)){
best=cur;
}
};
for(int i=0;i<sz;i++){
if(i>0 && nums[i]==nums[i-1]){
continue;
}
int left=i+1;int right=sz-1;
while(left<right){
int sum=nums[i]+nums[left]+nums[right];
if(sum==target) return target;
updata(sum);
if(sum>target){
int right0=right-1;
while(right0>left && nums[right0]==nums[right]){
right0--;
}
right=right0;
}
else {
int left0=left+1;
while(left0<right && nums[left0]==nums[left]){
left0++;
}
left=left0;
}
}
}
return best;
}