二分查找插入点

给定一个长度为 n 的有序数组 nums 和一个元素 target ,数组不存在重复元素。现将 target 插入数组 nums 中,并保持其有序性。若数组中已存在元素 target ,则插入到其左方。请返回插入后 target 在数组中的索引

无重复元素的情况

  1. 当数组中包含target时,因为题目要求插入到target的左方,所以说插入点的索引就是target的索引
  2. 当数组中不包含target时,此时我们就需要深入二分的原理刨析
  3. nums[mid] < target 时 l 移动,这意味着指针 l 在向大于等于 target 的元素靠近。同理,指针 r 始终在向小于等于 target 的元素靠近
  4. 因此二分结束时一定有:i 指向首个大于 target 的元素,j 指向首个小于 target 的元素
  5. 所以插入索引为 i

有重复元素情况

  1. 整体流程保持不变,每轮先计算中点索引 mid ,再判断 targetnums[mid] 的大小关系,分为以下几种情况
  2. nums[mid] < targetnums[mid] > target 时,说明还没有找到 target ,因此采用普通二分查找的缩小区间操作,从而使指针 l 和 r 向 target 靠近
  3. nums[m] == target 时,说明小于 target 的元素在区间 [i,mid−1] 中,因此采用 r=mid−1 来缩小区间,从而使指针 r 向小于 target 的元素靠近

总的来看,二分查找无非就是给指针 l 和 r 分别设定搜索目标,目标可能是一个具体的元素(例如 target ),也可能是一个元素范围(例如小于 target 的元素)。

在不断的循环二分中,指针 l 和 r 都逐渐逼近预先设定的目标。最终,它们或是成功找到答案,或是越过边界后停止。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零壹寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值