JZ42 劍指offer 和為S的兩個數字

2021-10-16 16:52:45 字數 1027 閱讀 9107

題目描述

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。

class

solution

; pair<

int,

int> ret;

int i =

0,j= array.

size()

-1;int tmp = int_max;

while

(i++i,

--j;

}elseif(

(array[i]

+array[j]

)>sum)

else}if

(ret.first == ret.second)

return

;return vector<

int>()

;}};

思路:

由於是遞增陣列,所以可以使用一頭一尾雙指標。如果當前這對值大於要求的和,則遞減右指標,如果小於要求的和,則遞增左指標,如果恰好等於,則判斷是否更新,然後同時遞增左指標,遞減右指標。最後返回結果。

雜湊版本

class

solution

; unordered_map<

int,

int> m;

pair<

int,

int> ret;

int tmp = int_max;

for(

int i =

0;isize()

;++i)

for(

int i =

0;isize()

;++i);}

}}if(ret.first == ret.second)

return

;return vector<

int>()

;}};

劍指offer42 和為S的連續正數序列

小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和...

劍指offer 42 和為S的兩個數字

題目 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸出描述 對應每個測試案例,輸出兩個數,小的先輸出。思路 此題關鍵之處在於任意多對兩個數的和相等,乘積最小的兩個數為兩個數之差的絕對值最大,也就是說可以先定義首元素和...

劍指offer系列(42) 和為S的兩個數字

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。對應每個測試案例,輸出兩個數,小的先輸出。思路分析採取兩邊夾逼的方法,和前一題類似,兩數和大於s,高字位自減,兩數和小於s,低字位自增 另外吐槽一下,此題第一組數,即兩數差...