版权声明: https://blog.csdn.net/zl6481033/article/details/88313040
1、题目描述
2、分析
给定一个包括 n 个整数的数组 nums
和 一个目标值 target
。找出 nums
中的三个整数,使得它们的和与 target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。上图中有示例。
在此题之前,做过一道三数之和的题,那道题是求三数之和为0的三元组,这道题是求三数之和和target最接近,其实可以转化为相同的做法。需要三个数的和和给定的target的值之间的差的绝对值最小,那么需要定义一个变量abs来记录差的绝对值。先对数组排序,然后遍历数组,和三数之和的题很像,先确定一个数,然后用左右指针滑动来找另外两个数,每确定两个数,求出三数之和,然后算这个和和给定的值得差值的绝对值newabs,然后比较和abs的大小,并更新abs和res。
3、代码
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
int res=nums[0]+nums[1]+nums[2];
int abs_Res=abs(res-target);
for(int i=0;i<nums.size()-2;++i){
int left=i+1,right=nums.size()-1;
while(left<right){
int newres=nums[i]+nums[left]+nums[right];
int newabs=abs(newres-target);
if(abs_Res>newabs){
abs_Res=newabs;
res=newres;
}
if(newres>target){
--right;
}
else
++left;
}
}
return res;
}
};
4、涉及知识点
还是关于数组,遇到数组的题,首先想需不需要排序,再考虑双指针。