16. 最接近的三数之和
双指针
详情可查看这个图解:画解算法:16. 最接近的三数之和
class Solution {public int threeSumClosest(int[] nums, int target) {int length = nums.length;// 返回值的初始值int ans = nums[0] + nums[1] + nums[2];Arrays.sort(nums);for (int i = 0; i < length; i++) {int fast = length - 1;int slow = i + 1;while (slow < fast){int sum = nums[i] + nums[slow] + nums[fast];// 最接近的值怎么取舍if(Math.abs(target - sum) < Math.abs(target - ans)){ans = sum;}// 双指针的移动if (sum > target) {fast--;}else if (sum == target){return ans;}else {slow++;}}}return ans;}public static void main(String[] args) {Solution solution = new Solution();int threeSumClosest = solution.threeSumClosest(new int[]{4,0,5,-5,3,3,0,-4,-5}, -2);System.out.println(threeSumClosest);}
}