思路
一分为二,逐渐逼近。
l,mid mid+1,r
l,mid+1 mid,r
方法
找到中点。
如果要找的数在左侧,则把mid作为右端,舍去右段。(新的部分要上中位数l+r>>1)
如果要找的数在右侧,则把mid作为左端,舍去左段。(新的部分要下中位数l+r+1>>1)
模板
while(l<r){
int mid=(l+r)>>1;//(l+r+1)>>1 depends on the situation
if(x<mid){
r=mid;
}else{
l=mid+1;
}
return l;
}