- 二分查找
第一版
class Solution(object):
def search(self, nums, target):
left,right = 0,len(nums)-1
while not((left==0 and right==0) or (left==len(nums)-1 and right==len(nums)-1)):
mid = int((left+right)/2)
if nums[mid] < target:
left = mid
elif nums[mid] == target:
return mid
elif nums[mid] > target:
right = mid
return -1
终止条件不对
low和high +1及-1,否则可能会陷入无限循环
class Solution(object):
def search(self, nums, target):
low,high = 0,len(nums)-1
while high >= low:
mid = int((low+high)/2)
if nums[mid] < target:
low = mid + 1
elif nums[mid] == target:
return mid
else:
high = mid - 1
return -1
时间复杂度o(log n)
示例
class Solution:
def search(self, nums: List[int], target: int) -> int:
left, right = 0, len(nums) - 1 # 定义target在左闭右闭的区间里,[left, right]
while left <= right:
middle = left + (right - left) // 2
if nums[middle] > target: #右边界
right = middle - 1 # target在左区间,所以[left, middle - 1]
elif nums[middle