问题链接
题目解析
给定n个元素的数组和目标值,取三个元素使三数之和最接近目标值,求最接近目标值的三数之和。
解题思路
本题与LeetCode 15. 3Sum,思路一模一样,难度相差不大。
同样的,先将数组排序。固定最小数字,移动左右指针,利用变量 (diff) 记录最小的误差值,需要注意一点:与 (3Sum) 不同,本题只需输出最接近的和即可,一些限制条件可以去除,比如 (nums[k]>target) 这种情况,在 (3sum) 中直接跳出循环,但在本题中也是有可能是答案的。
时间复杂度:(O(n^2))。
参考代码
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int diff = INT_MAX, res;
sort(nums.begin(), nums.end());
for(int k = 0; k < nums.size(); k++) {
int i = k+1, j = nums.size()-1;
while(i < j) {
int sum = nums[k] + nums[i] + nums[j];
int newDiff = abs(sum - target);
if(diff > newDiff) {
res = sum;
diff = newDiff;
}
if(sum < target) ++i;
else if(sum > target) --j;
else return target;
}
}
return res;
}
};
相似题目
LeetCode 1. Two Sum
LeetCode 15. 3Sum
LeetCode 18. 4Sum
LeetCode All in One题解汇总(持续更新中...)
本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.