題目:
最開始解法:
對於[3,4,5,1,2],我的想法是找到乙個邊界,當乙個元素比它前乙個元素小的時候。那麼這個數就是最小值。但是如果這個陣列是[1,2,3,4,5]呢?即沒有進行旋轉,此時上面的做法就不成立了,需要比較第乙個和最後乙個元素,如果小於等於最後乙個元素的話,就說明最小的是第乙個元素。
這樣的複雜度是o(n)。
其實後面想了下,最後不用經過判斷再返回第乙個元素了,可以直接返回numbers[0]
看了官網之後的解答:
因為旋轉陣列是由兩個有序陣列組合而成,因此適合用二分法來查詢
1.乙個指標low指向開頭,指標high指向結尾,指標bet(low+(high-low)/2) 指向中間。比較high指標指向的元素和中間bet指向的元素,會出現下面三種情況:
(1)num[high]>num[bet]說明最小元素在bet的左邊,因此現在只要將注意力放在low和bet之間就好了。
(2)num[high]**為:
劍指offer 11旋轉陣列中最小的數字
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。第一種方法 從頭開始遍歷,當遇到不滿足非遞減排序規律的那個數時,那就是旋...
劍指offer11 旋轉陣列的最小數字
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個公升序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。陣列可能包含重複項。注意 陣列內所含元素非負,若陣列大小為0,請返回 1。樣例 輸入 nums 2,2,2,0,1 輸出 0思路 首先判...
劍指Offer 11 旋轉陣列的最小數字
題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序陣列的乙個旋轉,輸出旋轉陣列的最小元素,例如,陣列為的乙個旋轉,該陣列的最小值為1.思路 設定兩個指標。利用二分查詢法。第乙個指標指向第乙個元素,第二個指向最後乙個元素。找到陣列的中間元素,如果中間的元素大於第乙...