16. 最接近的三数之和 3Sum Closest

Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

Input: nums = [-1,2,1,-4], target = 1
Output: 2
Explanation: The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

方法和15题三数之和类似

也是利用双指针法

public int threeSumClosest(int[] nums, int target) {
        int n = nums.length;
        Arrays.sort(nums);
        int min = Integer.MAX_VALUE;
        int sum = 0;
        for (int first = 0; first < n; first++) {
            if (first > 1 && nums[first] == nums[first - 1]) {
                continue;
            }
            int dst = target - nums[first];
            int third = n - 1;

            for (int second = first + 1; second < n; ) {
                if (nums[second] + nums[third] + dst > target && second < third) {
                    if (min > Math.abs(nums[second] + nums[third] - dst)) {
                        min = Math.abs(nums[second] + nums[third] - dst);
                        sum = nums[second] + nums[third] + nums[first];
                    }
                    third--;
                } else if (nums[second] + nums[third] == dst) {
                    return target;
                } else {
                    if (min > Math.abs(nums[second] + nums[third] - dst)) {
                        min = Math.abs(nums[second] + nums[third] - dst);
                        sum = nums[second] + nums[third] + nums[first];
                    }
                    second++;
                }
            }
        }
        return sum;
    }

 

参考链接:

https://leetcode.com/problems/3sum-closest/

https://leetcode-cn.com/problems/3sum-closest

posted @ 2020-12-02 10:18  diameter  阅读(93)  评论(0)    收藏  举报