面試題11 旋轉陣列的最小數字

2021-10-04 01:46:16 字數 977 閱讀 9482

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

題解:這題用python可以直接輸出min(列表),返回的就是列表中的最小值,當然也可以排序後輸出。

當然有思想的話就用二分查詢:分治法是不斷的縮小範圍,從而找到符合條件的解 

二分法的分析我們知道,陣列可以分為前後兩個遞增陣列,

下面的分析也都利用遞增的特性,

當numbers[mid] > numbers[high]時,說明最小值在mid的右邊,縮小範圍low = mid + 1

當numbers[mid] == numbers[high]時,我們不知道最小值的範圍,但是可以肯定的是去除numbers[high]是沒有影響的,縮小範圍high -= 1

當numbers[mid] < numbers[high]時,我們知道最小值的不是numbers[mid]]就是在mid的左邊,縮小範圍high = mid。

class solution(object):

def minarray(self, numbers):

""":type numbers: list[int]

:rtype: int

"""low=0

hight=len(numbers)-1

while low>1

if numbers[mid]numbers[hight]:

low=mid+1

else:

hight-=1 #如果相等就移除中間那個相等數

return numbers[low]

面試題11 旋轉陣列的最小數字

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。解題思路 輸入的陣列為非減排序陣列的旋轉,陣列分為兩個排好序的陣...

面試題11 旋轉陣列的最小數字

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。類似二分查詢,旋轉陣列由兩個有序陣列組成 class solut...

面試題11 旋轉陣列的最小數字

把乙個陣列最開始若干個元素搬到陣列的末尾 一般方法遍歷,o n 將這個陣列看作是兩個排序陣列 利用二分查詢的思想,比較中間的數字與兩頭 如果中間元素位於第乙個遞增陣列,大於 等於第乙個指標,範圍 右邊 如果中間元素位於後面遞增陣列,它應該小於 等於第二個指標 左邊 注意改變後指向中間元素 最後結果是...