这道题本来想先排序的,但时间复杂度不满足

卡了许久,求助评论区
代码如下:

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

这个代码是顺序数组二分查找的变种,最小元素大部分情况在中间
当 rotateArray[mid] 元素小于 rotateArray[low] 时,最小元素在 mid 左侧,需要减小 high
当 rotateArray[mid] 元素大于 rotateArray[high] 时,最小元素在 mid 右侧,需要增大 low
其余情况令 high 依次减***近最小元素

好累啊,不想学了