双指针;
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
pair<int,int> res(INT_MAX, INT_MAX);
for(int i = 0; i < nums.size(); i++)
{
for(int j = i + 1, k = nums.size() - 1; j < k; j++)
{
while(j < k - 1 && nums[i] + nums[j] + nums[k-1] >= target) k--; //找到>=target的第一个k位置
int s = nums[i] + nums[j] + nums[k];
res = std::min(res, make_pair(abs(s-target),s));
if(j < k - 1)
{
int s = nums[i] + nums[j] + nums[k-1];
res = std::min(res, make_pair(abs(s-target),s));
}
}
}
return res.second;
}
};