思想:
求三数之和最接近target的那组数。
先排序,再左右夹逼。时间复杂度O(n^2)。
class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
int result = 0;
int min_gap = INT_MAX;
sort(num.begin(),num.end());
for(auto a = num.begin(); a != prev(num.end(),2); a++) {
auto b = next(a);
auto c = prev(num.end());
while(b<c) {
const int sum = *a+*b+*c;
const int gap = abs(sum-target);
if(gap<min_gap) {
min_gap = gap;
result = sum;
}
if(sum>target) {
c--;
}else {
b++;
}
}
}
return result;
}
};
本文介绍了一种高效算法,用于在已排序的整数数组中找到三个数的组合,使得它们的和最接近给定的目标值。算法采用双指针策略,将时间复杂度控制在O(n^2),适用于需要快速解决此类问题的场景。
733

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



