题目:
给定一个包括 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) { if (nums == null || nums.length < 3) { return 0; } Arrays.sort(nums); int ans = nums[0] + nums[1] + nums[2]; //每次固定一位 比较其他两位 for (int i = 0; i < nums.length; i++) { int start = i + 1; int end = nums.length - 1; while (start < end) { int res = nums[i] + nums[start] + nums[end]; if (Math.abs(target - ans) > Math.abs(target - res)) { ans = res; } //如果目标值小于三数之和 end-- if (target < res) { end--; //目标值大于三数之和 start++ } else if (target > res) { start++; } else { return ans; } } } return ans; } }