[Leetcode][016] 3Sum Closest (Java)
题目: https://leetcode.com/problems/3sum-closest/
【标签】Array; Two Pointers
【个人分析】
这道题和它的姊妹题 3Sum 非常类似, 就不再多说了,具体一些的分析可以参考 [Leetcode][015] 3Sum
1 public class Solution { 2 public int threeSumClosest(int[] nums, int target) { 3 int result = target; 4 int len = nums.length; 5 if (len < 3) { 6 return 0; 7 } 8 Arrays.sort(nums); 9 for (int i = 0; i < len; i++) { 10 int number = nums[i]; 11 12 int leftIndex = i + 1; 13 int rightIndex = len - 1; 14 while (leftIndex < rightIndex) { 15 int threeSum = number + nums[leftIndex] + nums[rightIndex]; 16 if (threeSum == target) { 17 // best result found! 18 return target; 19 } else { 20 // update global result 21 if ( result == target || 22 Math.abs(target - threeSum) < Math.abs(target - result)) { 23 result = threeSum; 24 } 25 if (threeSum < target) { 26 while (leftIndex < rightIndex && 27 nums[leftIndex] == nums[leftIndex + 1]) { 28 leftIndex++; 29 } 30 leftIndex++; 31 } else { 32 while (leftIndex < rightIndex && 33 nums[rightIndex] == nums[rightIndex - 1]) { 34 rightIndex--; 35 } 36 rightIndex--; 37 } 38 } 39 } 40 } 41 return result; 42 } 43 44 }