輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。
對應每個測試案例,輸出兩個數,小的先輸出。
時間限制:1秒
空間限制:32768k
熱度指數:62731
思路
要找兩個數的和為s,並不難,但是如果存在多個符合這樣要求的數,那麼要找兩個數的積最小的。
我們發現陣列是排序數字,陣列首尾數字之積是小於中間數字之積的。
所以要找符合要求的數,乙個是從陣列的前面開始找,乙個是從陣列的後面找。
如果首尾兩個數字的和等於s,則直接返回。(不要判斷其他符合情況的數,這兩個數的積就是最小,因為首尾的積就是比中間數的積要小)
如果首尾兩個數字的和大於s,則說明陣列尾部的那個數太大了,往陣列前面移就可以了;
如果首尾兩個數字的和小於s,則說明陣列頭部的那個數太小了,往陣列後面移就可以了。
參考**
class solution else if(array[start] + array[end] < sum)
start++;
else
end--;
}return result;
}};
劍指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 ...
劍指offer 面試題57 和為s的數字
每日一句 we hold ourselves back in ways both big and small,by lacking self confidence,by not raising our hands,and by pulling back when we should be leani...