154. Find Minimum in Rotated Sorted Array II

跟 Q153 相比的不同就是可能存在重复元素了。

出现的问题就是, nums[m] == nums[r] 的情况下,转弯点可能在m 指针的右边(比如[3, 3, 1, 3] ),也可能在左边(比如[3, 1, 3, 3] ),需要单独设置一个判断来处理,直接放弃当前右端元素,重新计算m 进行比较即可,反正最小元素也不可能是右边这个(除非所有元素都相等)。

class Solution:
    def findMin(self, nums: List[int]) -> int:
        n = len(nums)
        l, r = 0, n-1
        while l < r:
            m = (l+r)//2
            if nums[m] > nums[r]:
                l = m + 1
            elif nums[m] <= nums[r]:
                r = m
            else:
                r -= 1
        return nums[l]

Last updated

Was this helpful?