给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum-closest
方法:快排+双指针
还是继续上一题的解法,不过此处需要注意返回值为int,若能凑到target则直接返回,若凑不到就先对比原有差值更新,再向其靠拢。
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int size = nums.size();
sort(nums.begin(), nums.end());
int i, left, right,mindiff=1000000,closest;
for (i = 0; i < size - 2;i++) {
left = i + 1;
right = size - 1;
while (left < right) {
if (nums[i] + nums[left] + nums[right] == target) {
return target;
}
else if (nums[i] + nums[left] + nums[right] < target) {
if (target-(nums[i] + nums[left] + nums[right]) < mindiff){
closest=nums[i] + nums[left] + nums[right];
mindiff=target-(nums[i] + nums[left] + nums[right]);
}
left++;
}
else {
if (nums[i] + nums[left] + nums[right]-target < mindiff){
closest=nums[i] + nums[left] + nums[right];
mindiff=nums[i] + nums[left] + nums[right]-target;
}
right--;
}
}
}