0%

最接近的三数之和

最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

这个和三数之和思路差不多。

​ 首先是数组进行排序

​ 不同的是,三个数之和靠近某一个值,并且直接返回最近的和。

​ 思路:

​ 还是通过三个指针,定义一个变量distance,表示三数之和sum与target的最小差。同样通过left和right指针,

left指向i+1,right指向数组尾。判断sum与target的差是否小于当前distance,如果是,则让distance等于当前差

​ 代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Solution {
public int threeSumClosest(int[] nums, int target) {
//数组排序
Arrays.sort(nums);

//返回结果
int result = 0;
//表示当前最小差
int distance = Integer.MAX_VALUE;
for (int i=0; i < nums.length; i++) {
//两个指针
int left = i + 1;
int right = nums.length - 1;

while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
if (sum < target) { //说明left需要后移
if (target - sum < distance) {
distance = target - sum;
result = sum;
}
//left右移
left ++;
} else if (sum > target) {
if (sum - target < distance) {
distance = sum - target;
result = sum;
}
right --;
} else {
return target;
}
}
}

return result;
}
}
-------------本文结束感谢您的阅读-------------