首页 > 其他 > 详细

关于二分的边界

时间:2019-10-12 09:37:18      阅读:76      评论:0      收藏:0      [点我收藏+]

在单调递增序列a中查询x的后继

while(l<r){
    int mid=(l+r)>>1;
    if(a[mid]>=x)
        r=mid;
    else l=mid+1;
}
return a[l];

 


在单调递增序列a中查询x的前驱

while(l<r){
    int mid=(l+r+1)>>1;
    if(a[mid]<=x) 
        l=mid;
    else r=mid-1;
}
return a[l];


若是单调递减序列 那么将if和else后面的语句交换一下位置就好了

注意,对于两种不同的目的,与之对应的mid是不同的,不然有可能会造成边界错误,然后就是死循环,这也是二分容易写挂的原因。

关于二分的边界

原文:https://www.cnblogs.com/mendessy/p/11658194.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!