剑指offer
一、二分查找的时间复杂度logn
二、总结:
1、单调性
2、存在两段性的性质
三、二分的流程
1、确定二分的边界
2、编写二分的代码框架
3、设计一个check 性质,答案在两段性质的分界点上
4、判断一下区间如何更新
5、如果更新方式写的是 l=mid,r=mid-1,那么就在算mid的时候加上1
四、模板
二分查找模板
版本1 :区间 [l,r] 的更新操作是 r=mid,l=mid+1;计算mid 绿颜色
int test( int l , int r){
while( l < r ){
int mid = l + r / 2;
if( check( mid ) ){
r = mid;
}else {
l= mid + 1;
}
}
return l;
}版本2:区间[l,r] 的更新操作是 r = mid-1,l=mid 时,计算mid 红
int test2(int l ,int r){
while(l<r){
int mid = l+r+1/2;
if (check(mid)){
l = mid;
}else {
r = mid-1;
}
}
return l;
}