数的范围 二分
Posted 幽殇默
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数的范围 二分相关的知识,希望对你有一定的参考价值。
整数二分 【例题 数的范围】
整数二分最难的在于边界的选定,选定的不好就可能陷入死循环。
根据y神所讲。解决整数二分用两个模板即可解决几乎所有的二分问题。
整数二分步骤:
- 找一个区间 [ L , R ] ,使得答案一定在该区间中。
- 找一个判断条件,使得该判断条件具有二段性,并且答案一定是该二段性的分界点。
- 分析最终点M在该判断条件下是否成立,考虑答案在哪个区间;如果不成立,考虑答案在哪个区间。
- 如果更新方式写的是R=mid,则不做任何的处理,如果更新方式写的是L=mid,则需要在计算mid时加上1。‘
拿一道题来练练手。
分析一下:
我们先看一下左端点的判断条件:
mid=L+R/2; //根据笔记是不用加1的
if(a[mid]>=x)
{
R=mid;
}
else
{
L=mid+1;
}
为啥不用加1 我们来分析一下:
死循环的退出条件是 L==R。
假设 L=R-1 R=R时
如果在计算mid时加1的话
mid=(R-1+R+1)/2=R
此时的 R没有任何的变化 R仍等于R 即陷入了死循环
而不用加1后 mid=(R-1+R)/2=R-1=L 此时的R=L了 即不会死循环。
我们再看一下右端点的边界:
mid=(L+R+1) /2; //根据笔记是用加1的
if(a[mid]<=x)
{
L=mid;
}
else
{
R=mid-1;
}
为啥用加1 我们来分析一下:
死循环的退出条件是 L==R。
假设 L=R-1 R=R时
如果在计算mid不加1的话
mid=(R-1+R)/2=L。
此时的 L没有任何的变化 L仍等于L 即陷入了死循环
而加1后 mid=(R-1+R+1)/2=R 此时的L=R了 即不会死循环。
以上是关于数的范围 二分的主要内容,如果未能解决你的问题,请参考以下文章