分析
这道题和上一道思想类似,都是固定一个最左侧指针,然后使用双指针进行一个遍历。不同的是本题不需要去重,即找到一个最接近的解即可。初始化起始解的思想比较好,可以借鉴。
代码(Java)
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int closestSum = nums[0] + nums[1] + nums[2]; // 初始化最接近的和为数组中前3个数的和,作为起始解
for (int i = 0; i < nums.length; i ++) {
int j = i + 1, k = nums.length - 1;
while (j < k) {
int sum = nums[i] + nums[j] + nums[k];
if (Math.abs(sum - target) < Math.abs(closestSum - target)) {
closestSum = sum;
}
if (sum == target) {
return sum;
} else if (sum < target) {
j ++;
} else {
k --;
}
}
}
return closestSum;
}
}