劍指offer 面試題57 和為S的兩個數字

2021-09-12 06:46:13 字數 606 閱讀 4638

面試題–【劍指offer】 題目解答

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

我們能馬上想到固定乙個數,然後依次遍歷陣列中的剩餘數字,在o(n2)的時間複雜度,解出題目。

但是由於時間複雜度過高,缺乏演算法技巧,可能不足以讓我們通過面試,實際上本題也是一類典型題,觀察題目發現是乙個增序陣列,又是求和問題,我們可以使用雙指標來進行快速解題,乙個在陣列頭,乙個在陣列尾。 然後把他們的值相加,結果只有三種可能,

(1)和等於s,那麼返回兩個數

(2)和大於s,那麼就把較大的數減小一點,就是把第二個指標前移

(3)和小於s,那麼就把較小的數增大一點,就是把第乙個指標後移

時間複雜度o(n)

class solution 

else

if(array[front]

+ array[back]

< sum)

++front;

else

--back;

}return res;}}

;

劍指offer 面試題 57 和為 S 的數字

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。對應每個測試案例,輸出兩個數,小的先輸出。時間限制 1秒 空間限制 32768k 熱度指數 62731 思路 要找兩個數的和為s,並不難,但是如果存在多個符合這樣要求的數,...

劍指offer 面試題57 和為s的數字

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。解決 public arraylistfindnumberswithsum int array,int sum else if array left array right...

劍指Offer 面試題57 和為 s 的數字

題目 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,輸出任意一對即可。題目 輸入乙個正數s,列印出所有和為s的連續正數序列 至少含有兩個數 例如輸入15,由於1 2 3 4 5 4 5 6 7 8 15,所以結果列印出3個連續序列1 5 4 ...