//最前面多加一句判断(是否个数为3个),从超过59%升为超过99%,无语
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
if (nums.size() == 3) return nums[0]+nums[1]+nums[2];
int res=100000, N = nums.size(), left, right;
sort(nums.begin(), nums.end());
for (int i = 0; i < N - 2; i++) {
left = i + 1;
right = N - 1;
while (left < right) {
while (left < right && nums[i] + nums[left] + nums[right] < target) left++;
if (left != i+1) res = abs(res) < abs(nums[i] + nums[left-1] + nums[right] - target) ? res : nums[i] + nums[left-1] + nums[right] - target;
else res = abs(res) < abs(nums[i] + nums[left] + nums[right] - target) ? res : nums[i] + nums[left] + nums[right] - target;
while (left < right && nums[i] + nums[left] + nums[right] > target) right--;
if (left < right && nums[left] + nums[right] + nums[i] == target) return target;
if (right != N-1) res = abs(res) < abs(nums[i] + nums[left] + nums[right+1] - target) ? res : nums[i] + nums[left] + nums[right+1] - target;
}
}
return res+target;
}
};
int main()
{
Solution sol;
vector<int> input = { -1,2,1,-4};
int target = 1;
cout << sol.threeSumClosest(input, target);
cout<< endl;
return 0;
}