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