16. 3Sum Closest (Medium)

https://leetcode.com/problems/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.

Example:

Given array nums = [-1, 2, 1, -4], and target = 1.

The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

Solutions

class Solution {

    // Solution for Problem 15 is a good template. Memorize it as possible as you can.

    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);

        int ans = -1;
        int min = Integer.MAX_VALUE;
        for (int i = 0, l = nums.length; i < l - 2; i++) {

            // nums[i - 1] is already calculated, skip nums[i] if same value with previous one
            if (i != 0 && nums[i] == nums[i - 1]) {
                continue;
            }

            int j = i + 1;
            int k = l - 1;
            while (j < k) {
                // skip already compared element
                if (j != i + 1 && (nums[j] == nums[j - 1])) {
                    j++;
                    continue;
                }

                // Since one exact solution only, stop searching to once found
                int sum = nums[i] + nums[j] + nums[k];
                if (sum == target) {
                    return sum;
                }

                // distance to target value, positive value
                int dist = Math.abs(sum - target);
                if (dist < min) {
                    min = dist;
                    ans = sum;
                }

                if (sum < target) {
                    j++; // approach target with larger value
                }

                if (sum > target) {
                    k--; // approach target with smaller value
                }
            }
        }

        return ans;
    }
}

Incorrect Solutions

References

Copyright © iovi.com 2017 all right reserved,powered by GitbookLast Modification: 2020-02-26 10:50:58

results matching ""

    No results matching ""