美文网首页
数字和 - LC16 3sum Closest

数字和 - LC16 3sum Closest

作者: 风烨 | 来源:发表于2017-11-08 07:40 被阅读0次

和15题的方法相近,就是通过绝对值找到最近的数字,时间附加度依然是O(n2)。

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        int closest = nums[0] + nums[1] + nums[2];
        Arrays.sort(nums);
        for(int i = 0; i< nums.length-2; i++){
            if (i > 0 && nums[i] == nums[i - 1]) continue;// skip save value
            for(int j = i + 1, k = nums.length - 1; j < k;){ // j for nearst value, k for biggest value
                int sum = target - nums[i];
                if (nums[j] + nums[k] == sum) return target;
                if ( nums[j] + nums[k] > sum) {
                    while(j < k && nums[j] + nums[k] > sum ) --k;
                    closest = (Math.abs(sum - nums[j] - nums[k+1]) < Math.abs(target - closest)) ? 
                        nums[i]+nums[j]+nums[k+1] : closest;
                } else{
                    while(j < k && nums[j] + nums[k] < sum ) ++j;
                    closest = (Math.abs(sum - nums[j-1] - nums[k]) < Math.abs(target - closest)) ? 
                        nums[i]+nums[j-1]+nums[k] : closest;
                }
            }
        }
        return closest;  
    }
}

相关文章

网友评论

      本文标题:数字和 - LC16 3sum Closest

      本文链接:https://www.haomeiwen.com/subject/zwxemxtx.html