Binary search (sorted array) 二分法

1、首先面临使用recursion(递归)or while-loop(while循环)

此处用while-loop,工程一般要求别用递归。

keypoints: 1、start + 1< end     2、start + (end - start)/2

                  3、A[mid] ==,<,>     4、A[start]  A[end] ? target

解释:1.start + 1< end 不符合的话只有两种情况,start与end相邻或者相交重合,此处为了以后作为模板通用所以使用此写法,它能够有效防止死循环。

           2.防止数太大溢出,显得你很细心

           3.因为在1中使用了start + 1< end 有效防止死循环,可以判断后直接end = mid / start = mid而不用end =mid+1 /  start+1;

Class solution{
  int binarySearch(int[] A , int target){
    if(A.size()==0){
      return -1;
    }
    int start = 0;
    int end = A.size()-1;
    int mid;
    while(start + 1 < end){
      mid = start + (end - start)/2;
      if(A[mid] == target){
        end = mid;
      }else if(A[mid] < target){
        start = mid;
      }else if(A[mid] > target){
      end = mid;
      }
    }
      
    if(A[start] == target){
      return start;
    }
    if(A[end] == target){
    return end;
    }
    return -1;
  }
}

2、用binary-search的一般条件

1、first / last position of·········
2、O(n) => O(log n)   一般log n都是二分法



http://www.lintcode.com/zh-cn/problem/search-insert-position/

 

http://www.lintcode.com/zh-cn/problem/search-a-2d-matrix/

 

http://www.lintcode.com/zh-cn/problem/first-bad-version/

 

http://www.lintcode.com/zh-cn/problem/find-peak-element/

 

http://www.lintcode.com/zh-cn/problem/find-minimum-in-rotated-sorted-array/

 

http://www.lintcode.com/zh-cn/problem/search-in-rotated-sorted-array/

 

http://www.lintcode.com/zh-cn/problem/merge-sorted-array/

 

http://www.lintcode.com/zh-cn/problem/median-of-two-sorted-arrays/

 

三步翻转法

http://www.lintcode.com/zh-cn/problem/recover-rotated-sorted-array/

 

http://www.lintcode.com/zh-cn/problem/rotate-string/

 

http://www.lintcode.com/zh-cn/problem/reverse-words-in-a-string/












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值