版权声明: https://blog.csdn.net/Dorothy_Xue/article/details/83187012
题目描述:
给定一个包括 n 个整数的数组 nums
和 一个目标值 target
。找出 nums
中的三个整数,使得它们的和与 target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
方法:
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
if(nums.size()==0) return 0;
if(nums.size()==1) return nums[0];
if(nums.size()==2) return nums[0]+nums[1];
sort(nums.begin(),nums.end());
int flag,ans;
int dis=100000;//距离target的长度
for(int i=0;i<nums.size()-2;i++)
{
int flagl=i+1,flagr=nums.size()-1;
while(flagl<flagr)
{
flag=nums[i]+nums[flagl]+nums[flagr];
if(abs(flag-target)<dis)
{
dis=abs(flag-target);
ans=flag;
}
if(flag-target>=dis)
flagr--;
if(target-flag>=dis)
flagl++;
}
}
return ans;
}
};
思路:
方法与上题三数之和类似,但是要注意的是不能跳过重复的数字,因为会忽略掉很多组合方式【跳过重复数字会报错,以[-1,-1,1,1,3],-1,为例,会报错,肉眼debug一遍就知道了。。。】