mid=(l+r)/2 mid=l+(r-l+1)/2 区别

用二分法解题时,mid上下取值正确与否关系程序是否进入死循环!!  

对与if(test(mid)) l=mid;

          else r=mid-1;  如果用 mid=(l+r)/2  会出现问题!!! 取l=3,r=4,会发现程序死循环!!!得用 mid=l+(r-l+1)/2;

对于if(test(mid)) r=mid;

       else l=mid+1;       显然得用mid=(l+r)/2   

两种方式一个向上,一个向下取整,具体问题具体分析!!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 这是一个计算机程序中的语句,用于计算一个区间的中间位置。其中,l和r是区间的左右端点,>>表示右移操作,相当于除以2的整数部分。因此,该语句的作用是将区间[l, r]分成两个部分,左半部分为[l, mid],右半部分为[mid+1, r]。 ### 回答2: int mid = l + (r - l) >> 1; 这段代码的作用是找到一个区间的中间位置。其中l和r都是表示区间的边界,通过将l和r相加取平均值并向右移动一位获得中间位置的索引。 这个操作实际上是一种二分查找的应用。在进行二分查找时,我们通常会将查找范围缩小到合理的区间,然后通过选取区间的中间位置来进行比较。如果中间位置的值大于目标值,则将查找范围缩小到中间位置的左侧;如果中间位置的值小于目标值,则将查找范围缩小到中间位置的右侧;如果中间位置的值等于目标值,则找到了目标值。不断地重复这个过程,最终可以找到目标值或者确定目标值不存在。 这里的mid就是得到了区间的中间位置,可以用来进行二分查找的操作。对于一个有序数组或者有序列表,我们可以使用这个中间位置来比较目标值与中间位置的值的大小关系,然后根据比较结果来缩小查找范围,直到找到目标值或者确定目标值不存在。这个操作在很多算法中都会用到,比如在排序算法、查找算法等等。 ### 回答3: 这段代码的意思是将变量l和r相加,然后将结果右移一位,并将得到的值赋给变量mid。 首先,将l和r相加,相当于将l和r的值相加,得到一个新的值。 接着,将得到的新值右移一位,相当于将新值的二进制表示向右移动一位,相当于将得到的值除以2的1次方,也就是将二进制向右移一位。 最后,将得到的右移后的结果赋值给变量mid,即将mid的值更新为右移后的结果。 总结起来,这段代码的作用是将l和r的和的一半赋给mid。这在一些算法中经常会用到,例如在二分查找算法中,mid就是分割区域的中间点。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值