力扣704.二分查找
Posted 才浅的每日python
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣704.二分查找相关的知识,希望对你有一定的参考价值。
二分查找步骤:
如果目标值等于中间元素,则找到目标值。
如果目标值小于中间元素,继续在左侧搜索。
如果目标值大于中间元素,则继续在右侧搜索。
如果最终搜索区间的左右节点重合也未找到,则表明不存在该值返回-1
时间复杂度:O(logN)
非递归方法实现
def search(nums, target):
start, end = 0, len(nums)-1
while start < end:
mid = start + (end - start)//2
if target == nums[mid]:
return mid
if target < nums[mid]:
end = mid - 1
else:
start = mid + 1
return -1
nums = [-1, 0, 3, 5, 9, 12]
target = 9
print(search(nums, target))
# 输出4
递归方法实现
def search(nums, target):
def bs(i, j):
if i > j:
return -1 # 设置终止条件
m = (i + j) // 2
if target == nums[m]:
return m
elif target < nums[m]:
return bs(i, m - 1)
else:
return bs(m + 1, j)
return bs(0, len(nums) - 1)
以上是关于力扣704.二分查找的主要内容,如果未能解决你的问题,请参考以下文章
精选力扣500题 第20题 LeetCode 704. 二分查找c++详细题解
代码随想录算法训练营第一天 | 704. 二分查找27. 移除元素