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

2021-08-18 13:11:57 字數 969 閱讀 4303

問題描述:

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。 note:給出的所有元素都大於0,若陣列大小為0,請返回0。

解題思路:

採用二分查詢,設定兩個游標low和high指向首尾

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

python實現完整**如下:

# coding:utf-8

defsolve

(arr):

if0 == 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]))

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

面試題 旋轉陣列的最小數字

題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。解法 順序查詢即可,時間複雜度為 利用二分查詢的思想,大部分情況旋轉後陣列最小值左邊數值為最大,利用前後指標的方法找到最小值,此...

面試題8 旋轉陣列的最小數字

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入的第一行為乙個整數n 1 n 1000000 代表旋轉陣列的元素個數。...

面試題8 旋轉陣列的最小數字

旋轉陣列的最小數字 問題描述 將乙個嚴格遞增的數字序列從第i個位置切分,將有半部分挪到左半部分,比如 1,2,3,4,5,6 3,4,5,6,1,2 輸出序列中最小的數字的位置 笨方法是從左到右掃瞄一遍,但是o n 的複雜度肯定是不行的。根據問題描述的性質可知,變換後的序列的第乙個數是大於最後乙個數...