題目:
講道理猴凹,這個(gè)總需要解釋下旋轉(zhuǎn)數(shù)組是什么
比如{3,4涛碑,5精堕,1,2} 是{1蒲障,2,3瘫证,4揉阎,5}的一個(gè)旋轉(zhuǎn)
就醬
順著找是O(n),既然是兩邊都有序背捌,那么我們類二分的找一下
大致就是二分的思路
兩個(gè)指針毙籽,一個(gè)頭一個(gè)尾,如果mid比第一個(gè)大毡庆,那么是前面那個(gè)有序數(shù)組的坑赡,要找的最小的肯定在右邊烙如,所以前面的移到mid如果mid小于第二個(gè),那么后面的移到mid
找到的條件是兩個(gè)指針的距離為1
注意
可能是一個(gè)全部有序的數(shù)組
還有可能 1 0 1 1 1
這樣毅否,不知道這個(gè)1是前面的還是后面的亚铁,遇到這樣的情況只能順序查找了
代碼:
def minNumberInRotateArray(rotateArray):
i,j = 0,len(rotateArray)-1
mid = 0
while rotateArray[i] >= rotateArray[j]:
if j - i == 1:
mid = j
break
mid = (i + j) / 2
if rotateArray[i] == rotateArray[mid] and rotateArray[j] == rotateArray[mid]:
mid = minNumber(rotateArray)
break
if rotateArray[i] <= rotateArray[mid]:
i = mid
elif rotateArray[mid] <= rotateArray[j]: # 這一點(diǎn)剛開始寫錯(cuò)了,沒有和后面那個(gè)比較螟加,想簡(jiǎn)單了徘溢,只和前面的比了
j = mid
return rotateArray[mid]
def minNumber(rotateArray):
if len(rotateArray) == 0:
return 0
if len(rotateArray) == 1:
return rotateArray[0]
for i in range(0,len(rotateArray)):
if rotateArray[i] < rotateArray[i-1]:
return i
然后決定用python開一下掛
def minNumberInRotateArray(self,rotateArray):
if len(rotateArray) == 0:
return 0
sort(rotateArray)
return rotateArray[0]
當(dāng)我以為我開了掛的時(shí)候,網(wǎng)上的大神教會(huì)了我做人??
def minNumberInRotateArray(self, rotateArray):
# write code here
if len(rotateArray) == 0:
return 0
return min(rotateArray)