154. 寻找旋转排序数组中的最小值 II
解法一:二分
class Solution:
def findMin(self, nums: List[int]) -> int:
n = len(nums)
left, right = 0, n - 1
while left < right:
mid = left + (right - left) // 2
# 为何不用nums[mid] >= nums[left] 判断mid是否在左分支?
# 因为存在重复,仅仅该条件不足以说明
if nums[mid] > nums[right]: #mid在左分支,则左边界右移
left = mid + 1
elif nums[mid] < nums[left]: #mid在右分支,则右边界左移
right = mid # 右边界移的慢一些(因为要找右断点)
else: # 不确定在哪个分支,缩小右边界(因为要找右断点)
right -= 1
#循环结束left就是右断点
return nums[left]扩展:若是求旋转数组最大值?
最后更新于