劍指 Offer 11 旋轉陣列的最小數字

2021-10-24 11:01:42 字數 1016 閱讀 1315

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列 [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

二分查詢的思想

把整個陣列看成: 左遞增陣列 + 右遞增陣列

實際上試求右遞增陣列的第乙個元素. 所以我們裡層的判斷條件是判斷nums[mid]和nums[end]的關係:

如果nums[mid] > nums[end], 說明右排序陣列還在nums[mid]的右邊

如果nums[mid] < nums[end], 說明右排序陣列就在右邊,並且最小值在mid或mid的左邊

如果nums[mid] == nums[end], 縮短右邊界

def

minarray

(numbers)

:"""

:type numbers: list[int]

:rtype: int

"""n =

len(numbers)

low =

0 height = n-

1while

(low: mid =

(low+height)//2

if numbers[mid]

< numbers[height]

: height = mid

elif numbers[mid]

> numbers[height]

: low = mid+

1else

: height -=

1return numbers[low]

劍指offer 11旋轉陣列中最小的數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。第一種方法 從頭開始遍歷,當遇到不滿足非遞減排序規律的那個數時,那就是旋...

劍指offer11 旋轉陣列的最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個公升序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。陣列可能包含重複項。注意 陣列內所含元素非負,若陣列大小為0,請返回 1。樣例 輸入 nums 2,2,2,0,1 輸出 0思路 首先判...

劍指Offer 11 旋轉陣列的最小數字

題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序陣列的乙個旋轉,輸出旋轉陣列的最小元素,例如,陣列為的乙個旋轉,該陣列的最小值為1.思路 設定兩個指標。利用二分查詢法。第乙個指標指向第乙個元素,第二個指向最後乙個元素。找到陣列的中間元素,如果中間的元素大於第乙...