Leetcode.寻找排序数组中的最小值
二分法
这里使用的是nums[mid]<nums[r]是因为,当上式满足的时候,最小值点一定落在mid左侧(包含mid),故r=mid。
而如果nums[mid]>nums[r],则最小值一定在mid右侧(不包含mid),故l=mid+1。
如果按照nums[mid]>nums[l],只能判断最小值一定在mid左侧(不包含mid),故l=mid+1,但是当nums[mid]<nums[l]时候,不能保证判断最小值在mid左侧还是右侧,只能移动l,不能移动指针r。
class Solution(object):
def findMin(self, nums):
n=len(nums)-1
l,r=0,n
if nums[l]<nums[r]:
return nums[l]
while l<r:
mid=(l+r)/2
if nums[mid]<nums[r]:
r=mid
else:
l=mid+1
return nums[l]