Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1. The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
1 public int threeSumClosest(int[] num, int target) { 2 // Start typing your Java solution below 3 // DO NOT write main() function 4 Arrays.sort(num); 5 int result = 0; 6 int lastAbs = 65536; 7 int len = num.length; 8 for (int i = 0; i < len; i++) { 9 int start = i + 1; 10 int end = len - 1; 11 while (start < end) { 12 if (num[i] + num[start] + num[end] == target) { 13 lastAbs = 0; 14 result = target; 15 start++; 16 end--; 17 return result; 18 } 19 if (num[i] + num[start] + num[end] > target) { 20 if (Math.abs(num[i] + num[start] + num[end] - target) < lastAbs) { 21 lastAbs = Math.abs(num[i] + num[start] + num[end] - target); 22 result = num[i] + num[start] + num[end]; 23 } 24 end--; 25 } 26 27 if (num[i] + num[start] + num[end] < target) { 28 if (Math.abs(num[i] + num[start] + num[end] - target) < lastAbs) { 29 lastAbs = Math.abs(num[i] + num[start] + num[end] 30 - target); 31 result = num[i] + num[start] + num[end]; 32 } 33 start++; 34 } 35 36 } 37 } 38 return result; 39 }