劍指Offer——(41)和爲S的兩個數字

題目描述:

輸入一個遞增排序的數組和一個數字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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章