劍指Offer值和為S的兩個數字
阿新 • • 發佈:2018-11-19
題目描述
輸入一個遞增排序的陣列和一個數字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; } };