Leetcode153 :寻找排序数组的最小值(I)
解题思路
对于二分法搜索,之前都是有序数组的搜索,根据条件确定去左区间还是去右区间搜索,但是本题的数组经过旋转,直接用二分好像没啥思路,得先观察旋转后的数组间的联系:
旋转后的数组是以最小值为分界点的,并且分界点左边的区间总是比右边的区间要大,因此我们的目的是找到这个一分为二的点,如下
l = [3,4,5,1,2]
left = 0
right = len(l)-1
while left < right:
mid = (left+right)//2
if l[mid] > l[right]:
#中间值比最右边值大,那么最小值在mid右侧,因此将mid右移
left = mid + 1
else:
#中间值比最右边值小,那么最小值在mid上或者在mid左侧
right = mid
print(l[right])