题意:给定一个整数数组和一个目标值target,找出一个三数组合,使它的和最接近target,并返回这个值。
16. 3Sum Closest (opens new window)
这题思路和3Sum类似,在遍历时计算最接近target的值并记录下来,取最大值。
class Solution {
public int threeSumClosest(int[] nums, int target) {
// 先排序,从小到大遍历
Arrays.sort(nums);
int closestSum = Integer.MAX_VALUE;
for (int i = 0; i < nums.length - 2; i++) {
int left = i + 1;
int right = nums.length - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
// 如果相加刚好等于target,直接返回
if (sum == target) {
return target;
}
if (Math.abs(target - sum) < Math.abs(target - closestSum)) {
closestSum = sum;
}
if (sum < target) {
left++;
// 跳过left相同的数字
while (nums[left] == nums[left - 1] && left < right) {
left++;
}
} else {
right--;
}
}
}
return closestSum;
}
}