3Sum Closest
问题简介:
给定n个整数的数组nums和整数目标,在nums中找到三个整数,使得总和最接近目标,返回三个整数的总和,可以假设每个输入都只有一个解决方案
举例:
给定数组:nums=[-1, 2, 1, -4], 目标值:target = 1.
最接近目标值的答案是2 (-1 + 2 + 1 = 2).
解法一:
与上一道题类似,这次要求的是三数之和与目标值的差值最小值,可以定义一个变量来记录这个差值
思路就是想先定义一个最接近的值默认取前三个数的合,然后将数组排序后
class Solution {
public int threeSumClosest(int[] nums, int target) {
int closest = nums[0] + nums[1] + nums[2];
int diff = Math.abs(closest - target);
Arrays.sort(nums);
int length =nums.length;
for (int i = 0; i < length - 2; ++i) {
int left = i + 1, right = length - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
int newDiff = Math.abs(sum - target);
if (diff > newDiff) {
diff = newDiff;
closest = sum;
}
if (sum < target) ++left;
else --right;
}
}
return closest;
}
}
小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海