1. 对数组进行排序
2. 固定left most,对middle和right most进行夹逼调整
3. 时间复杂度O(logN) + O(N2)
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int left = 0;
int middle = left+1;
int right = nums.size()-1;
int toTarget = nums[left] + nums[middle] + nums[right] - target;
while(left < nums.size()-2)
{
middle = left+1;
right = nums.size()-1;
int tmpTarget = target - nums[left];
while(middle < right)
{
int value = nums[middle]+nums[right] - tmpTarget;
if(abs(value) < abs(toTarget))
toTarget = value;
if(value == 0)
return target;
if(value > 0)
while((nums[right--]==nums[right]) && (middle < right));
if(value < 0)
while((nums[middle++]==nums[middle]) && (middle< right));
}
while((nums[left++]==nums[left])&&(left<nums.size()-2));
}
return toTarget+target;
}
};