leetcode 16 最接近三数之和 双指针问题

原题点这里

给一个数组,一个目标值,在数组中选出3个数,使其和最接近目标值。

受到15题的启发,使用双指针解决。

public static int threeSumClosest(int[] nums, int target) {
        int len = nums.length;
        Arrays.sort(nums);
        int ans = 0;
        int dis = Integer.MAX_VALUE;
        for(int i=0;i<len;i++){
            if(i>0&&nums[i]>target) break;
            if(i>0&&nums[i-1]==nums[i]) continue;
            int l = i+1;
            int r = len-1;
            while(l<r){
                int sum = nums[i]+nums[l]+nums[r];
                if(sum==target) return target;
                int disP = sum-target;
                if(Math.abs(disP)<dis){
                    dis = Math.abs(disP);
                    ans = sum;
                }
                if(disP>0){
                    r--;
                }
                if(disP<0){
                    l++;
                }
            }


        }
        return ans;
    }
View Code

 

posted @ 2020-05-13 14:07  超级学渣渣  阅读(140)  评论(0编辑  收藏  举报