/*
Sologala @github https://github.com/Sologala/LeetCode.git
LeetCode 16. 最接近的三数之和
*/
给定一个包括 n 个整数的数组 nums
和 一个目标值 target
。找出 nums
中的三个整数,使得它们的和与 target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
思路:
三个数字之和`sum =nums[i]+nums[l]+nums[h]` 我们对于i 遍历真个数组
对于l
和h
通过双指针来确定。 然后记录一个最小的距离,当找到更小的距离的时候记录下sum
如果有dis==0
的证明找到了最下的直接返回。
ac_code
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
int min_dis =INT_MAX,min_sum;
for(int i=0;i<nums.size();++i){
int l = 0,h =nums.size()-1;
while(l<h){
if(l==i){ l++;continue;}
else if(h==i) {h--;continue;}
int temp_sum=nums[i]+nums[l]+nums[h];
int temp_dis =(target-temp_sum);
if(temp_dis==0) return nums[i]+nums[l]+nums[h];
else if(abs(temp_dis)<(min_dis)) {min_dis =abs(temp_dis);min_sum =temp_sum;}
if(temp_dis>0) l++;
else if(temp_dis<0)h--;
}
}
return min_sum;
}
};