首页 > 其他 > 详细

二分查找

时间:2021-04-26 15:27:57      阅读:16      评论:0      收藏:0      [点我收藏+]

二分查找

二分查找可以分为查找一个目标值target是否存在和查找一个连续递增的数组中存在着多个相同target的最左边界或者最右边界。

二分查找是否存在target模板

下面这个模板中的输入数组是一个递增数组:

public boolean binarySearch(int[] arr,int target){
    int left=0,right=arr.length-1;
    while(left<=right){//终止条件是left=right+1
        int mid=(left+right)>>>1;//使用无符号位移防止溢出
        if(arr[mid]<target){
            left=mid+1;
        }else if(arr[mid]>target){
            right=mid-1;
        }else{
            return true;
        }
    }
    return false;
}

若果索引是负数的为了防止溢出mid可以使用mid=left+(right-left)/2。

二分查找最左侧的target模板

如果一个递增数组中存在着连续的target而我们需要查找这个数组中最左侧的target的下标:

public int binarySearch(int[] arr,int target){
    int left=0,right=arr.length;
    while(left<right){//终止条件是left=right
        int mid=(left+right)>>>1;
        if(arr[mid]>=target){
            right=mid;
        }else{
            left=mid+1;
        }
    }
    return left;
}

二分边界查找相关练习

二分查找

原文:https://www.cnblogs.com/takagi/p/14703882.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!