二分就记得是边界条件真是日了狗,一个月不看就忘光了 算法咋这么难,艹
    这玩意就像一个二叉树一样,所以时间复杂度就是logn嘛
    kafka的日志缩影也用到了二分,kafka 牛逼

    二分法是基于有序数组实现的,因为他要随机访问地址啊,啥也别说了,写个二分算求

    1. public int search(int[] arr,int target){
    2. if(arr==null){
    3. return -1;
    4. }
    5. int low = 0;
    6. int high = arr.length-1;
    7. while (low<high){
    8. int mid = (low+high)/2;
    9. if(arr[mid]==target){
    10. return mid;
    11. }else if(target>arr[mid]){
    12. low = mid+1;
    13. }else {
    14. high = mid -1;
    15. }
    16. }
    17. return -1;
    18. }

    递归做法

    1. public int rsearch(int arr[],int low,int high,int targer){
    2. if(low>high){
    3. return -1;
    4. }
    5. int mid = (low+high)/2;
    6. if(arr[mid] == targer){
    7. return mid;
    8. }else if(targer>arr[mid]){
    9. return rsearch(arr,mid+1,high,targer);
    10. }else {
    11. return rsearch(arr,low,mid-1,targer);
    12. }
    13. }