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
原文地址:https://www.cnblogs.com/superxuezhazha/p/12882037.html