这一题和leetCode(15)的3sum基本上一个思路 —— two pointer。而且题目保证只有有一个答案,所以还不需要考虑重复的问题,只需要维护一个与target差值最小的closeDistance,以及对应的数组上的值就好。
代码如下:
1 public class Solution { 2 public int threeSumClosest(int[] nums, int target) { 3 //先排序 4 Arrays.sort(nums); 5 int minDistance = Integer.MAX_VALUE; 6 int result = 0; 7 for (int i = 0; i < nums.length;i++) { 8 int head = i + 1; 9 int tail = nums.length - 1; 10 while(head < tail) { 11 int sum = nums[i] + nums[head] + nums[tail]; 12 int currDis = Math.abs(sum - target); 13 //判断当前差值是否比最小差值要小,如果是,则更新minDistance和result 14 if (currDis <= minDistance) { 15 result = sum; 16 minDistance = currDis; 17 } 18 if (sum < target) head++; 19 else if (sum > target) tail--; 20 //差值为0,已经是最小,故直接返回 21 else return sum; 22 } 23 } 24 return result; 25 } 26 }