笔记
题目:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
class Solution {
public int threeSumClosest(int[] nums, int target) {
//数组排序
Arrays.sort(nums);
int closest = Integer.MAX_VALUE, sub = 0, subabs = 0, sum = 0;
//每次固定i,在i的两侧设置left和right,根据与target的差值大小调整左移右移
for (int i = 1; i < nums.length - 1; i++) {
int left = 0, right = nums.length - 1;
while (left < i && i < right) {
sub = nums[left] + nums[i] + nums[right] - target;
subabs = Math.abs(sub);
//closest记录和与target的差,sum记录closest对应下的元素和
if (closest > subabs) {
closest = subabs;
sum = nums[left] + nums[i] + nums[right];
}
//三数和大于target,right左移,和减小
if (sub > 0) right--;
//三数和小于target,left右移,和增大
else if (sub < 0) left++;
else {
sum = target;
break;
}
}
}
return sum;
}
}
原贴:https://blog.csdn.net/xc121566/article/details/81331628
赏心悦目,共勉