class Solution:
def findMin(self, nums: List[int]) -> int:
if not nums:
return 0
if len(nums)==1:
return nums[0]
l,r = 0,len(nums)-1
while l<r:
mid = (l+r)//2
#如果中间的大于等于最真右边,最小值一定在右区间,因此缩小右区间
#如果中间的小于右边界,最小值一定是在左区间,缩放右边界
#中值有可能是mid,所以r = mid
if nums[mid]>=nums[r]:
l = mid+1
else:
r = mid
return nums[l]
题目分析:
- 最小值的右边一定是严格递增的,最小值得左边也是一定严格递增的
- 如果中间的值大于有边界的值,最小值一定是在右边界的,缩小左边界
- 如果中间的值是小于右边界的,最小值一定是在左边界的,缩小有边界,但是右边界为mid。因为又能可mid的值是最小值
- 如果l==r的时候即可返回