天天看點

劍指offer 11 旋轉數組的最小數字leetcode 刷題 ——劍指offer 11 旋轉數組的最小數字@TOC

leetcode 刷題 ——劍指offer 11 旋轉數組的最小數字@TOC

把一個數組最開始的若幹個元素搬到數組的末尾,我們稱之為數組的旋轉。輸入一個遞增排序的數組的一個旋轉,輸出旋轉數組的最小元素。例如,數組 [3,4,5,1,2] 為 [1,2,3,4,5] 的一個旋轉,該數組的最小值為1。

示例 1:

輸入:[3,4,5,1,2]

輸出:1

示例 2:

輸入:[2,2,2,0,1]

輸出:0

我最先想到的方式:暴力比較

對比兩個list中的元素,一旦出現前一個大于後一個的情況,那後一個就是被旋轉的最小值。因為遞增清單旋轉之後隻會出現兩段遞增清單。(最後加上沒有旋轉過的清單的情況)

python:

class Solution:
    def minArray(self, numbers: List[int]) -> int:
        n = len(numbers)

        for i in range(n-1):
            if numbers[i]>numbers[i+1]:
                return numbers[i+1]
        return numbers[0]
           

官方題解使用了二分查找

class Solution:
    def minArray(self, numbers: List[int]) -> int:
        low, high = 0, len(numbers) - 1
        while low < high:
            pivot = low + (high - low) // 2
            if numbers[pivot] < numbers[high]:
                high = pivot 
            elif numbers[pivot] > numbers[high]:
                low = pivot + 1
            else:
                high -= 1
        return numbers[low]

作者:LeetCode-Solution
連結:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/solution/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-by-leetcode-s/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。