题目
解法:二分法
class Solution:
def minArray(self, numbers: List[int]) -> int:
for i in range(len(numbers)):
left = 0
right = len(numbers)-1
while left < right:
mid = (left + right) // 2
if numbers[mid] > numbers[right]: #如果中间值大于最后一个值,说明mid在左半段
left = mid+1
elif numbers[mid] < numbers[right]: #如果中间值小于最后一个值,说明mid在右半段
right = mid #有可能是mid 不-1
elif numbers[mid] == numbers[right]:
right -= 1
return numbers[left]
参考官方题解:旋转数组的最小数字_二分法
二分查找的标准写法python
def BinarySearch(li,val)
'li是要查找的列表,而val是要找的数'
left = 0
right = len(li)-1
while left <= right: #候选区有值
mid = (left + right) // 2
if li[mid] == val: #找到
return mid
elif li[mid] > val: #目标值在左半边,将right移到mid左面一个索引位置
right = mid - 1 #mid肯定不等于,所以要减1
elif li[mid] < val:
left = mid + 1
else: #没找到
return None