把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列 [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 將這個陣列看作是兩個排序陣列 利用二分查詢的思想,比較中間的數字與兩頭 如果中間元素位於第乙個遞增陣列,大於 等於第乙個指標,範圍 右邊 如果中間元素位於後面遞增陣列,它應該小於 等於第二個指標 左邊 注意改變後指向中間元素 最後結果是...