tag: 二分查詢
難易程度:簡單
題目描述:
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列 [3,4,5,1,2] 為 [1,2,3,4,5] 的乙個旋轉,該陣列的最小值為1。
示例1:
輸入:[3,4,5,1,2]
輸出:1
示例2:
輸入:[2,2,2,0,1]
輸出:0
本題難點排序陣列的旋轉,找到旋轉點,效能最佳。
具體思路尋找旋轉陣列的最小元素即為尋找右排序陣列的首個元素
numbers[x]
,稱 x為旋轉點。
排序陣列的查詢問題首先考慮使用二分法解決,其可將遍曆法的 線性級別 時間複雜度降低至 對數級別 。
展開分析numbers[m] == numbers[j]
情況:
提示 是否可以用numbers[m]
和numbers[i]
比較做代替?不可以。因為做比較的目的是判斷 m 在哪個排序陣列中。但在 numbers[m] > numbers[i]情況下,無法判斷 m 在哪個排序陣列中。本質是因為 j 初始值肯定在右排序陣列中; i 初始值無法確定在哪個排序陣列中。
class
solution
else
if(numbers[mid]
< numbers[r]
)else
}return numbers[l];}
}
複雜度分析: 11題旋轉陣列的最小數字
題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。思路 採用二分查詢法可以降低複雜度,但是要考慮特別情況,例如旋...
11 旋轉陣列的最小數字
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。我的 二分法 class min defsolution self,nums a nums 0 b nums 1 iflen num...
11 旋轉陣列的最小數字
二分法搜尋方法 include using namespace std intmin int numbers,int length int index1 0 int index2 length 1 int indexmid index1 while numbers index1 numbers in...