Notes:
跟3Sum差不多;
1、对数组排序;
2、对于每个a = num[i],问题是在num[i+1]到num[n-1]中 b+c = -a:
记b = num[i + 1],c = num[n-1];
sum = a + b + c;
若sum < target, and sum < small, samll = sum, j++;
若sum > target,and sum > big, big = sum, k--;
若sum == target,则返回target;
public class Solution {
public int threeSumClosest(int[] nums, int target) {
int a, b, c, sum;
int i, j, k;
int small = -2147483648, medium = -2147483648, big = 2147483647;
int INT_MAX = 2147483647, INT_MIN = -2147483648;
Arrays.sort(nums);
// boolean flag = false;
for (i = 0; i < nums.length; i++) {
// flag = false;
if(i == 0 || nums[i] != nums[i-1]){
a = nums[i];
j = i + 1;
k = nums.length - 1;
while(j < k){
b = nums[j];
c = nums[k];
sum = a + b + c;
if(sum < target){
if(sum > small){
small = sum;
}
j++;
}
else if(sum == target){
return target;
}
else {
if(sum < big){
big = sum;
}
k--;
}
}
}
}
if(small != INT_MIN && big == INT_MAX){
return small;
}
if(small == INT_MIN && big != INT_MAX){
return big;
}
return (target - small)<(big - target)?small:big;
}
}