注意:数组中无重复
二分法关键:
1. while循环条件为left < right 而不是left <= right
2. 右边界收缩条件为mid = right 而不是mid = right - 1
class Solution:
def findMin(self, nums: List[int]) -> int:
left, right = 0, len(nums)-1
while left < right:
mid = (left + right) // 2
if nums[mid] < nums[right]:
right = mid
else:
left = mid + 1
return nums[left]
数组中可能存在重复的元素
因此比上一题只需要添加一句:
当nums[mid] == nums[right]时, right -= 1
而且这题left < right 和left <= right 都可以
class Solution:
def findMin(self, nums: List[int]) -> int:
left, right = 0, len(nums)-1
while left < right:
mid = (left + right) // 2
if nums[mid] > nums[right]:
left = mid + 1
elif nums[mid] < nums[right]:
right = mid
else:
right -= 1
return nums[left]