16、3Sum Closest
最接近的三数之和
给一个包含 n 个整数的数组 S, 找到和与给定整数 target 最接近的三元组,返回这三个数的和。
注意事项
只需要返回三元组之和,无需返回三元组本身
样例
例如 S = [-1, 2, 1, -4]
and target = 1
. 和最接近 1 的三元组是 -1 + 2 + 1 = 2.
代码:
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int N=nums.size();
sort(nums.begin(), nums.end());
int res=nums[0]+nums[1]+nums[2];
for(int i=0;i<N-2;i++)
{
int left=i+1,right=N-1;
while(left<right)
{
int sum=nums[i]+nums[left]+nums[right];
if(abs(sum-target)<abs(res-target)) res=sum;
else if(sum<target)left++;
else right--;
if(res==target)return res;
}
}
return res;
}
};