二分查找

411 阅读1分钟

剑指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;
}