1. 程式人生 > >劍指Offer值和為S的兩個數字

劍指Offer值和為S的兩個數字

題目描述

輸入一個遞增排序的陣列和一個數字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;
    }
};