1. 程式人生 > >面試題之旋轉陣列求最小數字問題(Python實現)

面試題之旋轉陣列求最小數字問題(Python實現)

旋轉陣列求最小數字

問題描述:
把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非遞減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 NOTE:給出的所有元素都大於0,若陣列大小為0,請返回0。

解題思路:
採用二分查詢,設定兩個遊標low和high指向首尾

特殊情況,當陣列中有大量重複元素時候,例如{1, 0, 1, 1, 1},採用二分查詢會返回1,因此只能順序查詢

python實現完整程式碼如下:

# coding:utf-8

def solve(arr):
    if
0 == len(arr): return 0 low = 0 high = len(arr)-1 while high - low > 1: middle = (low+high)//2 # 如果出現大量重複(例如:[1,0,1,1,1]),只能順序查詢 if arr[middle] == arr[low] and arr[low] == arr[high]: for i in range(low+1, high+1): if arr[i] < arr[low]: return
arr[i] elif arr[middle] >= arr[low]: low = middle elif arr[middle] <= arr[high]: high = middle return arr[high] if __name__ == '__main__': # 測試程式碼 print(solve([1,0,1,1,1])) print(solve([3,4,5,6,1,2]))

如有錯誤,歡迎指正和交流~