最接近的三数之和
题目:
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
思路:
1.将给定的数组进行排序
2.遍历数组,并且将第一个元素置为nums[i]
3.定义两个指针,左指针为 i+1,右指针为数组最后一个元素的下标。
4.看他们的和,如果他们的和比我们想要的和小,那么左指针右移,如果比我们想要的大,那么右指针左移。如果有更接近的三数之和,那么我们更新sum
优化:
去除重复元素
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
// int closest_num=10000;
int closest_num=nums[0]+nums[1]+nums[2];
for (int i = 0; i < nums.length-2; i++) {
int l=i+1,r=nums.length-1;
while(l<r)
{
int sum=nums[l]+nums[r]+nums[i];
if(Math.abs(target-sum)<Math.abs(target-closest_num))
closest_num=sum;
if(sum<target)
{
l++;
while(l<r&&nums[l]==nums[l+1])//去重
l++;
}
else
{
r--;
while(l<r&&nums[r]==nums[r+1])//去重
r--;
}
}
if(i>0&&nums[i]==nums[i-1])//去重
continue;
}
return closest_num;
}
来源:CSDN
作者:凭栏听雨客
链接:https://blog.csdn.net/qq_43720551/article/details/104683389