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

2021-08-20 21:37:20 字數 1577 閱讀 8534

題目描述

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。 note:給出的所有元素都大於0,若陣列大小為0,請返回0。

思路:看起來挺好做的,但是複雜度為o(n);這題給出了排序陣列,明顯要用到這個條件。二分查詢法複雜度為o(logn)。

非遞減排序陣列的旋**

1 2 3 4 5 *****= 1 2 3 4 5 未發生旋轉 array[low] < array[high]

1 2 3 4 5 *****= 3 4 5 1 2 發生旋轉 array[low]>=array[high] 二分查詢

0 1 1 1 1 *****= 1 1 1 0 1 ***** 1 0 1 1 1 array[low]==array[high]==array[mid] 順序查詢

class solution 

intlen=rotatearray.size();

if(rotatearray[0]len-1])

return rotatearray[0];

if(rotatearray[0]==rotatearray[len-1] && rotatearray[0]==rotatearray[(len-1)>>1])

return *min_element(rotatearray.begin(),rotatearray.end());

int start=0,end=len-1,mid=0;

while(end-start>1)

return rotatearray[end];

}};

python

# -*- coding:utf-8 -*-# -*- coding:utf-8 -*-

class

solution:

def__init__

(self):

self.er_flag=false;

defminnumberinrotatearray

(self, rotatearray):

# write code here

if len(rotatearray)==0:

er_flag=true

return

0 length=len(rotatearray)

start=0

end=length-1

mid=(start+end)>>1

if rotatearray[start]==rotatearray[mid] and rotatearray[start]==rotatearray[end]:

return min(rotatearray)

while end-start>1:

mid=(start+end)>>1

if rotatearray[mid]>=rotatearray[start]:

start=mid

else:

end=mid

return rotatearray[end]

劍指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 規律 一般前旋轉區的數大於等於後旋轉區的...