浅谈二分的细节问题

Posted may-2nd

tags:

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

最大值最小

给定一个不降的序列 (a),求其中大于等于 (x) 的第一个数。

其实就是查找第一个合法的点。

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

如果当前 (mid) 小了,就向右寻找,当前 (mid) 不可能是答案,可以直接忽略 (mid),以 (mid+1) 为左端点。

如果当前 (mid) 大了或等于了,就向左寻找,当前 (mid) 可能是答案,不可以直接忽略 (mid),应该以 (mid) 为右端点。

初始条件默认 (lleq r)。因为是整除 (oldsymbol 2),所以在循环中 (midinleft[l,r ight),mid+1inleft[l,r ight])

考虑死循环的情况,(l) 这里有 (+1) 肯定是不会的,而 (r=mid) 显然是不可能的。

所以最后 (l=r)

最小值最大

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

浅谈二分

浅谈对二分思想的理解

浅谈二分和二分答案

整体二分浅谈

浅谈二分

提升 工作方式 浅谈