16.最接近的三数之和
这道题和15.三数之和的思想一样,都是用双指针将n的三次方复杂度降低为n的平方,一定要排序。
这道题用了一个优化:
如果 a+b+c ≥target,那么就将k向左移动一个位置;
如果 a+b+c<target,那么就将j向右移动一个位置。
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
if(nums.size() == 0) return 0;
sort(nums.begin(), nums.end());
int ans = 0xfffffff;
for(int i = 0; i < nums.size()-2; i ++)
{
int j = i + 1, k = nums.size() - 1;
while(j < k)
{
abs(target - ans) > abs(target - nums[i] - nums[j] - nums[k]) ? ans = nums[i] + nums[j] + nums[k] : ans += 0;
if(nums[i] + nums[j] + nums[k] > target) k--;
else j++;
}
}
return ans;
}
};