题目描述
分析
这道题和上一道思想类似,都是固定一个最左侧指针,然后使用双指针进行一个遍历。不同的是本题不需要去重,即找到一个最接近的解即可。初始化起始解的思想比较好,可以借鉴。
代码(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;}
}