【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出
思路
因为数组已经排好序了,我们设定两个指针small和big指向两端,如果此时两者的和大于sum,那么big左移,如果小于sum,那么small右移,一旦等于,那么同时这两者也正好是乘积最小的一对,我们就可以结束了。
class Solution
{
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum)
{
vector<int> ans;
int len = array.size();
if(len<2)
return ans;
int small = 0;
int big = len-1;
while(small<big)
{
if(array[small]+array[big] == sum)
{
ans.push_back(array[small]);
ans.push_back(array[big]);
return ans;
}
else if(array[small]+array[big]>sum)
big--;
else
small++;
}
return ans;
}
};

本文介绍了一种方法来解决在递增排序的数组中找到两个数,使得它们的和等于给定的S,并且输出乘积最小的数对。通过设置两个指针在数组两端移动,当指针所指数值之和等于S时,即找到了乘积最小的数对。此方法利用了排序数组的特性,通过指针的移动高效地搜索答案。
268

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



