该题与上一题有些类似,但是比上一道题简单很多,不需要考虑有没有重复的情况。因此大致思路如下:
先对数组进行排序,然后从头开始遍历直到nums.size()-2的每一个元素,对于每一个元素在此元素之后寻找两个元素使得三个数的和离target最近。实现代码如下:
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int res = nums[0] + nums[1] + nums[2];
int dis = abs(res - target);
for (int i = 0; i < nums.size() - 2; i++)
{
int left = i + 1;
int right = nums.size() - 1;
while (left < right){
int resNew = nums[i] + nums[left] + nums[right];
if (resNew < target)left++;
else if (resNew > target)right--;
else return resNew;
int disnew = abs(resNew - target);
if (disnew < dis){ dis = disnew; res = resNew; }
}
}
return res;
}
};