Problem: 704. 二分查找
坑点
- r = len(nums) - 1 忘记写 -1了
- while l <= r: 这里需要等于,这样l == r的时候,可以计算一下当前的mid再多走一步
代码
普通二分查找
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
l = 0
r = len(nums) - 1
while l <= r:
mid = (l + r) // 2
if nums[mid] < target:
l = mid + 1
elif nums[mid] > target:
r = mid - 1
else:
return mid
return -1
二分找上限
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
l = 0
r = len(nums) - 1
while l <= r:
mid = (l + r) // 2
if nums[mid] <= target:
l = mid + 1
else:
r = mid - 1
return l - 1 if nums[l - 1] == target else -1