小白笔记:二分搜索

小白笔记只为记录自己学习的过程,内容不严谨之处还请大佬帮忙指出,不建议用来学习、借鉴

注意事项:

  1. 无需在意数列个数是奇数还是偶数;
  2. 判断条件;
  3. lf,r的缩小范围;
  4. 不同的范围有不同的写法(左闭右闭、左闭右开);

1.

无论是奇数还是偶数,其mid的结果没有差别;

如:偶数 lf = 0(实际为 第一个数),r = 7(实际为 第八个数);

        mid = (lf + r) / 2 = 3(第四个数);需要甄别 5-8 位数

        奇数 lf = 1; r = 7;

        mid = (lf + r) / 2 = 4; 需要甄别 6-8 位数

        奇数、偶数的差别便是奇数比偶数少甄别一位a[mid],但其mid进行改变的前提便是 a[mid]         != m,所以那一位数不等于 m 时,a[mid] 是否多甄别一位对结果没有影响。 

2. lf <= r

当lf == r时也是会有成立的情况,

如lf = 4,r = 5,a[mid] = 5,a[mid+1] = 6 ,mid = 4,m = 6;

……5(mid),6…… m = 6;

此时 m = 6 > 5 = a[mid] → lf = mid + 1 = 5,a[5] = 6;

此时 r = lf = mid,且a[mid] == m; 此时mid符合条件,但当判准中不存在 lf == r 的条件时,这一情况会被忽略

3.

当 m > mid 时,lf = mid + 1 ,因为此时的 a[mid] != m,那么mid不需要被甄别,mid舍弃

r 同理,条件满足时,r = mid - 1;

若mid后失去 +- 1 的运算,如当 lf = 6,r = 7, m > a[mid](lf 需要 = mid) 时,mid = 13 / 2 = 6,lf = mid = 6;又因为我们判断循环的条件为 lf <= r,失去+-1,对上述情况会造成死循环;

4.

当范围如[5,9),左闭右开的情况下,判断条件为lf < r,r取不到r本身,所以不存在lf == r的情况

且当需要 r 转换为mid时,r = mid,因为判断中 lf != r,所以当此时r = mid的mid是取不到的,若是-1就忽略掉一位mid前需要甄别的数字

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

YunXiaoYuJi_bai

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值