binary-search - 二进制搜索模板 Leetcode,它的含义是什么?
问题描述
def binarySearch(nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if len(nums) == 0:
return -1
left, right = 0, len(nums)
while left < right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid
# Post-processing:
# End Condition: left == right
if left != len(nums) and nums[left] == target:
return left
return -1
他们说“模板 #2 是二进制搜索的高级形式。它用于搜索需要访问当前索引及其在数组中的直接右邻索引的元素或条件。”
我正在努力理解上述信息的含义。在通常的二进制搜索中,权利将是
right = len(nums) - 1 # before while loop
right = mid - 1 # inside while loop
而while循环将是
while left <= right:
解决方案
您正在对数组执行二进制搜索。假设数组有 100 个元素。
# left, right = 0, len(nums)
left = 0, right = 99
# mid = (left + right) // 2
mid = 49
# elif nums[mid] < target:
We need to move right.
# left = mid + 1
left = 50 and right = 99
# else:
We need to move left.
# right = mid
Left = 0, right = 49
推荐阅读
- svg - 放大 svgpanzoom 时保留线宽
- java - 如何找到两个优先级队列之间的联合?
- postgresql - 如何降低 Postgres 中 set_bit 的成本?
- python - 使用 opencv 在 python 中为 OCR 进行适当的图像阈值处理
- c - 如何使用 C 编程中的线程计算文本文件中数字的平均值?
- laravel - 如何计算 Laravel Blade 中产品的总价格
- php - xml 文件的 PHP file_get_content() 返回奇怪的数字
- node.js - 在 S3 存储桶中上传的图片链接不显示图片
- docker - 为什么尝试加入 docker swarm 时出现身份验证错误
- c - STM32 FreeRTOS 与 LibOpenCM3