给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

示例 1:

输入:nums = [-1,2,1,-4], target = 1

输出:2

解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

示例 2:

输入:nums = [0,0,0], target = 1

输出:0

提示:

3 <= nums.length <= 1000-1000 <= nums[i] <= 1000-104 <= target <= 104 class Solution {

public:

int threeSumClosest(vector& nums, int target) {

int len=nums.size();

int last=INT_MAX;

int lastlen=INT_MAX;

sort(nums.begin(),nums.end());

for(int i=0;i

{

if(i>0&&nums[i-1]==nums[i])continue;

if(i

{

int sum3=nums[i]+nums[len-1]+nums[len-2];

if(abs(target-sum3)

{

last=sum3;

lastlen= abs(target-sum3);

}

continue;

}

if(itarget)

{

int sum2=nums[i]+nums[i+1]+nums[i+2];

if(abs(target-sum2)

{

last=sum2;

}

break;

}

int j=i+1; int k=len-1;

while(j

{

if(j>i+1&&nums[j-1]==nums[j])

{

j++;

continue;

}

if(k

k--;

continue;

}

int sum=nums[j]+nums[k]+nums[i];

if(abs(target-sum)

{

last=sum;

lastlen= abs(target-sum);

}

if(sum

{

j++;

}else if(sum>target){

k--;

}else

{

return target;

}

}

}

return last;

}

};

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。