又是一个由二分和倍增查找结合起来的畸形种
int search(int 左边界(L),int 右边界(R),int 查找的数(n))
{
int l,r;
l=r=1; //速度指针
while(L<R)
{
if( 判断左右任意界是否为正解 ) return 答案;
if( 左边界移动后仍然在答案左侧 )
L=L+l,l*=2; //移动左边界,改变速度指针
else
R=min(R,L+l),l/=2; //将右边界移动到左边界,改变速度指针
if( 右边界移动后仍然在答案右侧 )
R=R-r,r*=2; //移动右边界,改变速度指针
else
L = max(L,R-r) , r/=2; //将左边界移动到右边界处,改变速度指针
}
return 任意两边界;
}
求大佬回复一下他的复杂度跟二分和倍增比怎么样,有没有什么优点?