http://oj.leetcode.com/problems/3sum-closest/
class Solution {
public:
// Similar to 3Sum Equal
// Enumerate the minimal number, and then it becomes similar to 2Sum Equal
// The overall time complexity is O(NlgN+N*N)=O(N*N)
int threeSumClosest(vector<int> &num, int target) {
int ans=num[0]+num[1]+num[2];
int minAbsDiff=abs(num[0]+num[1]+num[2]-target);
sort(num.begin(),num.end());
int N=num.size();
for(int i=0;i<N;i++){
int left=i+1;
int right=N-1;
while(left<right){
int diff=num[i]+num[left]+num[right]-target;
if(abs(diff)<minAbsDiff){
minAbsDiff=abs(diff);
ans=num[i]+num[left]+num[right];
}
if(minAbsDiff==0) return ans;
if(diff>0) right--;
else left++;
}
}
return ans;
}
};