和爲s的兩個數(32)

題目

【輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,使得他們的和正好是S,如果有多對數字的和等於S,讓輸出的兩個數的乘積是最小的】


1、分析
用兩個指針分別指向數組的第一個元素和最後一個元素,若兩數的和大於s ,則尾指針前移;若兩數的和小於s,則頭指針後移。
2、代碼

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        vector<int> res;
        if(array.size()<2)
            return res;
        vector<int>::iterator ahead=array.begin();
        vector<int>::iterator behind=array.end()-1;
        while(ahead<behind)
        {
            if(*ahead+*behind==sum)
            {
                res.push_back(*ahead);
                res.push_back(*behind);
                break;
            }
            if(*ahead+*behind<sum)
                ++ahead;
            if(*ahead+*behind>sum)
                --behind;
        }
        return res;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章