劍指offer Python版 - 旋轉陣列的最小數字
阿新 • • 發佈:2018-11-20
題目描述
把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非遞減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 NOTE:給出的所有元素都大於0,若陣列大小為0,請返回0。方法1:
使用Python內建函式min(),直接尋找最小元素。# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
if rotateArray == []:
return 0
return min(rotateArray)
執行時間:1042ms
佔用記憶體:5760k
方法2:
觀察旋轉後的陣列,可以將陣列分為兩個排序的子陣列,前面子陣列的元素均大於後面子陣列的元素,而最小元素剛好是兩個子陣列的分界線。遍歷陣列中的元素,若前一個元素比後一個大,則後一個元素就是最小元素,如果不存在,則說明第一個元素就是最小。# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
if rotateArray == []:
return 0
for i in range(len(rotateArray) - 1):
if rotateArray[i] > rotateArray[i + 1]:
return rotateArray[i + 1]
return rotateArray[0]
執行時間:854ms
佔用記憶體:5736k
方法3:
二分查詢法。
# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
left, right = 0, len(rotateArray) - 1
while right - left > 1:
mid = (left + right) // 2
if rotateArray[mid] >= rotateArray[left]:
left = mid
if rotateArray[mid] <= rotateArray[right]:
right = mid
return rotateArray[right]
執行時間:1050ms
佔用記憶體:5732k