题目描述
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
解题思路:所有N数之和的问题,都应该想到排序+双指针。
当N > 2时,外层用循环嵌套处理。例如:N = 3则一层循环 + 双指针;N = 4则两层循环 + 双指针。
本题思路:先快速排序,再用双指针找三数之和。(在数组 nums 中,进行遍历,前指针指向 start = i + 1 处,后指针指向 end = nums.length - 1 处,则该问题变成了“两数之和”问题)
参考代码
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int length = nums.size();
if(length < 3)
return 0;
sort(nums.begin(), nums.end());
int res = 0;
int min_gap = INT_MAX;
for(int i = 0; i <= length-3; i++){
int low = i + 1, high = length - 1;
while(low < high){
int tmp_sum = nums[i] + nums [low] + nums[high];
int tmp_gap = abs(target - tmp_sum);
if(tmp_gap == 0)
return tmp_sum;
if(tmp_gap < min_gap){
min_gap = tmp_gap;
res = tmp_sum;
}
if(tmp_sum > target)
high--;
else
low++;
}
}
return res;
}
};
探讨了在给定数组中寻找三个整数,使其和最接近特定目标值的算法。通过排序和双指针技术,实现了高效求解。示例代码展示了C++实现过程。
4628

被折叠的 条评论
为什么被折叠?



