二分查找易错点

在这里插入图片描述

  • 首先,需要注意的是,java中数据的长度是length不是length()

  • mid=(left+right)/2 的位置:因为初始化也需要,在每一个if判断里也都需要,所以说不管代码到哪个if,都要执行。所以可以直接把这句代码写在while循环的顶部。

  • 在每次更新的时候,一定注意是left=mid+1,right=mid-1。否则的话运行时间会超出限制。

  • 在代码随想录中看到还有一种新的表示方法:int mid = left + ((right - left) >> 1);太菜了以至于忘记了,这里再记录一下

  • java中有三种移位运算符

<< : 左移运算符,num << 1,相当于num乘以2
>> : 右移运算符,num >> 1,相当于num除以2
>>> : 无符号右移,忽略符号位,空位都以0补齐

学习完之后,在想为什么不直接写成 (left + right ) >> 1,我就用代码测试了一下,是一样的结果。

学习完之后,又在想为什么使用右移,而不是直接除以2呢,猜想这里面是有提升速度的原因。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值