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

2021-09-24 15:17:11 字數 1057 閱讀 3509

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為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 規律 一般前旋轉區的數大於等於後旋轉區的...