leetcode 3Sum Closest

 avatar
unknown
java
3 years ago
1.2 kB
2
Indexable
class Solution {
    public int threeSumClosest(int[] nums, int target) {
        
        Arrays.sort(nums);
        
        for (int i = 0; i < nums.length-2; i++) {
            if (i != 0 && nums[i] == nums[i-1]) {
                continue;
            }
            helper(nums, i, target);
        }
        
        return ans;
    }
    
    private int ans = 0;
    private int absoluteVal = Integer.MAX_VALUE;
    
    private void helper(int[] nums, int idx, int target) {
        
        int start = idx+1, end = nums.length-1;
        while (start < end) {
            
            int val = nums[idx]+nums[start]+nums[end]-target;
            if (Math.abs(val) < absoluteVal) {
                ans = nums[idx]+nums[start]+nums[end];
                absoluteVal = Math.abs(val);
            }
            if (val == 0) {
                return;
            }
            if (val < 0) {
                while (start < end && nums[start] == nums[start+1]) {
                    start++;
                }
                start++;
            } else {
                while (start < end && nums[end] == nums[end-1]) {
                    end--;
                }
                end--;
            }
        }
    }
    
}
Editor is loading...