题目描述
第一次:2022年12月27日10:20:52
解题思路
双指针
详情可查看这个图解:画解算法:16. 最接近的三数之和
注意点
- 返回值的初始值
可以直接排序后,选取前三个。从题目中可以看出,数组最少都会有三个数。 - 最接近的值怎么取舍
使用数学中的取绝对值 - 双指针的左移右移
因为是首先对数组进行排序了,
所以当前的和 比 期望值大了,肯定是缩小,所以移动的就是右指针,当前的和 比 期望值小了,扩大,移动左指针。
代码展示
class Solution {
public int threeSumClosest(int[] nums, int target) {
int length = nums.length;
// 返回值的初始值
int ans = nums[0] + nums[1] + nums[2];
Arrays.sort(nums);
for (int i = 0; i < length; i++) {
int fast = length - 1;
int slow = i + 1;
while (slow < fast){
int sum = nums[i] + nums[slow] + nums[fast];
// 最接近的值怎么取舍
if(Math.abs(target - sum) < Math.abs(target - ans)){
ans = sum;
}
// 双指针的移动
if (sum > target) {
fast--;
}else if (sum == target){
return ans;
}else {
slow++;
}
}
}
return ans;
}
public static void main(String[] args) {
Solution solution = new Solution();
int threeSumClosest = solution.threeSumClosest(new int[]{4,0,5,-5,3,3,0,-4,-5}, -2);
System.out.println(threeSumClosest);
}
}