原题点这里
给一个数组,一个目标值,在数组中选出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; }