把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。 note:給出的所有元素都大於0,若陣列大小為0,請返回0。
思路:
整個陣列是乙個非減排序的陣列,那麼旋轉陣列之後最小元素落入的區間就只有三種情況:1、正好是陣列的中間元素;2、在陣列的左半邊;3、在陣列的右半邊。由此可以想到,用二分查詢的策略可以解決上述問題。即找出陣列的中間元素,讓其與陣列的最左邊元素進行比較,如果中間元素大於最左邊元素,則陣列左半邊(包括中間元素在內)都是非降序的,那麼最小元素一定在右邊;如果中間元素小於最左邊元素,則說明左半邊元素有公升有降,那麼最小元素一定在左半邊,如果中間元素等於最左邊元素,那麼中間元素及其左邊元素相同,最小元素位於在右邊。
solution:
python
# -*- coding:utf-8 -*-
class solution:
def minnumberinrotatearray(self, rotatearray):
# write code here
if len(rotatearray) == 0:
return 0
left,right = 0,len(rotatearray)-1
mid = left+(right-left)//2
while mid < right:
if rotatearray[mid] > rotatearray[left]:
left = mid
mid = left+(right-left)//2
elif rotatearray[mid] < rotatearray[left]:
right = mid
mid = left+(right-left)//2
else:
return rotatearray[mid+1]
#return rotatearray[right] 兩個返回值都可以
劍指Offer 6 旋轉陣列的最小元素
description把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。可以直接binary search,每次mid和r的...
劍指offer(6) 旋轉陣列的最小數字
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。這道題最直觀的解法並不難,從頭到尾遍歷陣列一次,我們就能找出最小的元素。這...
劍指Offer (6)旋轉陣列的最小數字
題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。實現如下 l m r 規律 一般前旋轉區的數大於等於後旋轉區的...