每日一題 11 旋轉陣列的最小數字

2021-10-08 11:03:14 字數 1051 閱讀 9051

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...