给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
方法一:跟每日一题14很相似,先排序,再双指针。
class Solution {
public:
void isans(int sum, int* ans,int target){
if(abs(sum-target)<abs(*ans – target)){
*ans = sum;
}
}
int threeSumClosest(vector<int>& nums, int target) {
int n = nums.size();
if(n == 3){
return nums[0]+nums[1]+nums[2];
}
sort(nums.begin(),nums.end());
int ans = 1e7;
for(int first = 0;first<n;first++){
if(first>0 && nums[first] == nums[first-1]){
continue;
}
int third = n-1;
int second = first+1;
while(second < third){
int sum = nums[first]+nums[second]+nums[third];
if(nums[first]+nums[second]+nums[third] == target){
return target;
}
isans(sum,&ans,target);
if(sum > target){
third–;
}else{
second++;
}
}
}
return ans;
}
};