二分查找最右最左值

52 阅读1分钟

最左值

public static int binarySearchLeft(int[] a,int target){  
    int i=0,j=a.length-1;  
    while (i<=j){  
        int m=(i+j)>>>1;  
        if(a[m]<target){  
            i=m+1;  
        }else if(a[m]>=target){  
            j=m-1;  
        }  
    }  
    return i;  
}

最右值

public static int binarySearchRight(int[] a,int target){  
    int i=0,j=a.length-1;  
    while (i<=j){  
        int m=(i+j)>>>1;  
        if(a[m]>target){  
            j=m-1;  
        }else{  
            i=m+1;  
        }  
    }  
    return i-1;  
}