1. 程式人生 > >8旋轉陣列最小數字PYTHON

8旋轉陣列最小數字PYTHON

把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非遞減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{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