leetcode#34两次二分查找

这篇博客详细介绍了如何使用两次二分查找在已排序数组中寻找目标值的起始和结束索引。作者强调了二分查找中边界条件处理的重要性,并分享了避免陷入死循环的技巧。文章通过具体示例展示了如何分别进行左侧和右侧的二分查找,并提到了在Python中处理二分查找时向下取整可能导致的问题。
摘要由CSDN通过智能技术生成

题目要求:
在一个排序好的数组中寻找target 并返回target的起始index
如不存在 则返回[-1,-1]
要求时间时间复杂度为O(logn)
思路:
显然看到复杂度为logn需要利用二分查找
!!!二分查找踩坑!!!!
之前对于二分查找只是粗略的理解概念,知道对于logn的时间复杂度需要利用二分查找并没有完整的写过详细代码
所以这一次写的时候对于边界处理不够仔细 经常会出现死循环的问题
记录一下二分查找的一般思路
首先找到首尾L,R = 0,len(nums)
之后mid = (L+R)//2
这里//为向下取整
所以在L,R更新值的时候取左mid
即nums[i]>=target的时候 R = mid
nums[i]<target 时 L= mid+1
这里必须要有一个为mid+1
否则会一直陷入死循环
!!!二分查找踩坑!!!
这道题需要两次二分查找 首先在range(0,lens)之间查找target的起始位置
然后在range(index_begin,lens)之间查找结束位置
前者为左mid 后者为右mid 需要进行区分
查找右mid时 因为python中//为向下取整
所以计算mid时需要(L+R+1)//2 加上一后强行向上取整

class 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值