数的范围 二分

Posted 幽殇默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数的范围 二分相关的知识,希望对你有一定的参考价值。

整数二分 【例题 数的范围】

整数二分最难的在于边界的选定,选定的不好就可能陷入死循环。

根据y神所讲。解决整数二分用两个模板即可解决几乎所有的二分问题。
整数二分步骤:

  1. 找一个区间 [ L , R ] ,使得答案一定在该区间中。
  2. 找一个判断条件,使得该判断条件具有二段性,并且答案一定是该二段性的分界点。
  3. 分析最终点M在该判断条件下是否成立,考虑答案在哪个区间;如果不成立,考虑答案在哪个区间。
  4. 如果更新方式写的是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了 即不会死循环。

以上是关于数的范围 二分的主要内容,如果未能解决你的问题,请参考以下文章

ACwing_789. 数的范围

算法789. 数的范围——二分

数的范围(整数二分)

5.数的范围

二分——数的范围

二分——数的范围