8旋轉陣列最小數字PYTHON
阿新 • • 發佈:2019-01-08
把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非遞減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 NOTE:給出的所有元素都大於0,若陣列大小為0,請返回0。
思路:使用二分查詢
1、設定一個首部指標low,一個尾部指標high,以及一個最小值初始值minVal
2、求出中間座標middle,若a[low]小於a[middle],把low移到中間,否則將high移到中間
3、迴圈2,直到 high-low = 1,則最小值為a[high]
特殊情況:當陣列為空時返回0,當陣列有大量重複時,使用for迴圈普通方法找最小值
# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
if len(rotateArray) == 0:
return 0
low = 0
high = len(rotateArray)-1
minVal = rotateArray[low]
while high - low > 1:
middle = (low+high)/2
if rotateArray[low] <= rotateArray[middle]:
low = middle
elif rotateArray[low]>=rotateArray[middle]:
high = middle
elif rotateArray[middle] == rotateArray[low] and rotateArray[low] == rotateArray[high]:
for i in range(1, len(rotateArray)):
if rotateArray[i] < minVal:
minVal = rotateArray[i]
high= i
minVal = rotateArray[high]
return minVal