3Sum Closest
描述
Given an array S of n integers, find three integers in S such that the sum is closest to a given number,
target. Return the sum of the three integers. You may assume that each input would have exactly one
solution.
For example, given array S = {-1 2 1 -4}, and target = 1.
e sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
class Solution{
public:
int threeSumCloest(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 = upper_bound(a,prev(num.end()),*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 ) {
result = sum ;
min_gap = gap;
}
if(sum < target){
b = upper_bound(b, c, *b);
}
else{
c = prev(lower_bound(b, c, *c));
}
}
}
return result;
}
};

lower_bound(a, b, val):返回容器中第一个值【大于或等于】val的元素的iterator位置。
upper_bound(a, b, val):返回容器中第一个值【大于】
参考资料:
LeetCode题解
本文深入探讨了3SumClosest算法,旨在从给定整数数组中寻找三个数,使其和最接近指定目标值。文章详细介绍了算法的实现过程,包括排序、双指针技巧及如何使用upper_bound和lower_bound函数优化搜索效率。
482

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



