題目描述:
輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,使得它們的和正好是S。如果有多對數字的和等於S,輸出任意一對即可
實現如下:
//使用兩個指針,分別指向排序數組的第一個元素和最後一個元素,它們是最小值和最大值
//將指針指向的值相加的和與S進行比較
//如果和比S小,則後移前指針
//如果和比S大,則前移後指針
//注意
//1.有可能不存在和爲S的兩個數,所有路徑都有返回值
//2.題目規定乘機最小,其實就是之和最小,也就是第一次相等時的兩個元素。。
class Solution
{
public:
vector<int> FindNumbersWithSum(vector<int> array, int sum)
{
vector<int> tmp;
if (array.size() < 2)//防禦性動作
return tmp;
vector<int>::iterator itBegin = array.begin();//前迭代器
vector<int>::iterator itEnd = --array.end();//後迭代器
int count = 0;//記錄兩個數之和
while (itBegin < itEnd)//判斷有可能不存在和爲S的兩個數字
{
count = *itBegin + *itEnd;
if (count < sum)//和比S小,後移前指針
++itBegin;
else if (count > sum)//和比S大,前移後指針
--itEnd;
else//當和相等時,將元素壓入序列
{
tmp.push_back(*itBegin);
tmp.push_back(*itEnd);
break;
}
}
return tmp;
}
};