January 16, 2019

16. 3Sum Closest

16. 3Sum Closest

Java:

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);
        
        int closest = Integer.MAX_VALUE;
        int diff = Integer.MAX_VALUE;
        
        for (int i = 0; i < nums.length - 2; i++) {
            int j = i + 1;
            int k = nums.length - 1;
            
            while (j < k) {

                int sum = nums[i] + nums[j] + nums[k];
                if (Math.abs(sum - target) < diff) {
                    diff = Math.abs(sum - target);
                    closest = sum;
                }
                if (sum == target) {
                    return closest;
                } else if (sum - target > 0) {
                    k--;
                } else {
                    j++;
                }
            }
        }
        return closest;
    }
}

Python:

class Solution:
    def threeSumClosest(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        
        nums.sort()
        closest = sys.maxsize
        closest_sum = sys.maxsize
        for i in range(len(nums) - 2):
            l, r = i + 1, len(nums) - 1
            while l < r:
                cur_sum = nums[i] + nums[l] + nums[r]
                cur = abs(cur_sum - target)
                if cur == 0:
                    return cur_sum
                if cur < closest:
                    closest = cur
                    closest_sum = cur_sum
                if cur_sum - target < 0:
                    l += 1
                else:
                    r -= 1
        return closest_sum
comments powered by Disqus