版权声明:所有的博客都是博主的个人笔记。。。。。 https://blog.csdn.net/qq_35976351/article/details/83373854
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
思路
l
表示左侧位置,r
表示右侧位置。不断向中间靠拢,如果array[l]+array[r] == sum
,则找到正确结果,如果l>=r
说明无解。
AC代码
注意边界条件
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array, int sum) {
vector<int>res;
int l = 0, r = array.size() - 1;
while(l < r) {
if(array[l] + array[r] == sum) { // 正确结果
res.push_back(array[l]);
res.push_back(array[r]);
return res;
} else if(array[l] + array[r] > sum) { // 结果偏大,右侧缩小
--r;
} else { // 结果偏小,左侧增加
++l;
}
}
return res;
}
};