面試題–【劍指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 ...