二分查找避免死循环

模板一:在求mid时不加1,将数列分成[l,mid]和[mid+1,r]两个部分

while(l<r)
{
    int mid=(l+r)/2;
    if(check(mid)) r=mid;
    else l=mid+1;
}

模板二:在求mid时加1,将数列分成[l,mid-1]和[mid,r]两个部分

while(l<r)
{
    int mid=(l+r+1)/2;
    if(check(mid)) r=mid-1;
    else l=mid;
}

但如果定义成double类型的,二分的精度够的话,便不用考虑上述的问题了。

猜你喜欢

转载自blog.csdn.net/Stevenwuxu/article/details/108311610