题目:
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). tip: 思路相似 和数求和相关的题,排序后使用双指针
solution:
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());//先排序
int n = nums.size();
int threesum=nums[0]+nums[1]+nums[2];//初始值设定
int sum_star = abs(nums[0]+nums[1]+nums[2]-target);
for(int star = 0;star<n-2;star++)
{
int left = star+1,right = n-1;//固定第一个值,双指针遍历
while(left < right)
{
int sum = nums[star]+nums[left]+nums[right];
int sum_end = abs(sum-target);
if(sum_end<sum_star)
{
sum_star=sum_end;
threesum=sum;
}
if(sum>target) --right;//这里的切换条件为重点
else
++left;
}
}
return threesum;
}
};