问题1:寻找 target 位置,没有返回 - 1 问题2:从右往左,寻找 < target 的第一个位置 问题3:从左往右,寻找 > target 的第一个位置 问题4:从右往左,寻找 <= target 的第一个位置 问题5:从左往右,寻找 >= target的 第一个位置
以上问题是求很多解力扣算法题的基础,需要好好的掌握:
问题1:寻找 target 位置,没有返回 - 1
def binary_search(nums: list[int], target: int) -> int:
i = 0
j = len(nums) - 1
while i <= j:
mid = (i + j) // 2
if nums[mid] > target: j = mid - 1
elif nums[mid] < target: i = mid + 1
# 核心点:相等情况处理
else:
return mid
return -1
问题2:从右往左,寻找 < target 的第一个位置
def binary_search(nums: list[int], target: int) -> int:
i = 0
j = len(nums) - 1
while i <= j:
mid = (i + j) // 2
if nums[mid] > target: j = mid - 1
elif nums[mid] < target: i = mid + 1
# 核心点:相等情况处理
else:
j = mid - 1
return j
问题3:从左往右,寻找 > target 的第一个位置
def binary_search(nums: list[int], target: int) -> int:
i = 0
j = len(nums) - 1
while i <= j:
mid = (i + j) // 2
if nums[mid] > target: j = mid - 1
elif nums[mid] < target: i = mid + 1
# 核心点:相等情况处理
else:
i = mid + 1
return i
问题4:从右往左,寻找 <= target 的第一个位置
def binary_search(nums: list[int], target: int) -> int:
i = 0
j = len(nums) - 1
while i <= j:
mid = (i + j) // 2
if nums[mid] > target: j = mid - 1
elif nums[mid] < target: i = mid + 1
# 核心点:相等情况处理
else:
if j == mid: break
j = mid
return j
问题5:从左往右,寻找 >= target的 第一个位置
def binary_search(nums: list[int], target: int) -> int:
i = 0
j = len(nums) - 1
while i <= j:
mid = (i + j) // 2
if nums[mid] > target: j = mid - 1
elif nums[mid] < target: i = mid + 1
# 核心点:相等情况处理
else:
if i == mid: break
i = mid
return i
标签:二分,elif,return,target,nums,int,mid,算法,查找 From: https://www.cnblogs.com/baokang/p/18651874