close标记最接近target的值
res表示三个整数之和
对数组进行排序后遍历0=< i <= nums.size() - 2 – 三个整数中的第一个整数
使用left right 左右两个指针进行遍历 – 三个整数中的其余两个整数
sum = nums[i] + nums[left] + nums[right]
如果sum与target之和小于close – 更新close
如果sum<target ++left
如果sum>target –right
代码如下:
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int res = nums[0] + nums[1] + nums[2];
int close = abs(res - target);
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size() - 2; ++i) {
int left = i + 1, right = nums.size() - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
int newclose = abs(sum - target);
if (close > newclose) {
close = newclose;
res = sum;
}
if (sum < target) ++ left;
else --right;
}
}
return res;
}
};