二分查找算法的理解

本文介绍了二分查找算法在寻找序列中元素首次和最后一次出现位置的应用。在寻找首次出现位置时,通过不断调整边界避免溢出,并确保左移边界以找到最小值。而在寻找最后一次出现位置时,通过向上取整的中间值并调整右边界,来找到最大值。
摘要由CSDN通过智能技术生成

前言

在做LIS的O(nlgn)算法时,用到了二分查找算法。对于其中的一些条件,例如 l<r 和 l <= r 的区别,r = mid和r = mid-1的区别等等不是很了解,于是进行了一些学习。

找第一次的出现位置

二分查找因为有几个限制,其中一个便是 单调序列 这个要求,所以可能出现 2 3 4 4 4 5 6这样的数组,那么返回第一个出现的位置便是 i = 3时。

i 0 1 2 3 4 5 6
a[i] 2 3 4 4 4 5 6
  • 具体思路 :对于 l = 0,r = 6的区间,每次求mid = l+(r-l)/2 (这里是因为怕溢出,如果是l+r,可能溢出你设置的类型,比如溢出int),判断a[mid]与所查找的数x的大小关系,如果 a[mid] < x,那么l = mid+1。否则 r = mid。这里因为 /2 都是向下取整,所以r = mid ,r右移。
    例如 寻找 4 第一次出现的位置,最后 r = 2,mid = 1,a[mid] < x,l右移,则确定 第一个4.
  • 代码 :
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值