您的位置:首页 > 其它

靠近左、右的二分搜索例程

2017-03-22 16:27 239 查看
靠近左:只有当arr[mid]<target时才向右,下界lo推进,mid=lo+((hi-lo)>>1),最后位置在lo

靠近右:只有当arr[mid]>target时才向左,上界hi推进,mid=lo+((hi-lo+1)>>1),最后位置在hi

public class test649 {
public static void main(String[] args) {
int[] arr={1,1,1,1,2,2,3,4,5,6,6,6,7,7,7,7,7,8,9,10,10,17,18,20};
System.out.println(binaryLeftSearch(arr, 7));
System.out.println(binaryRightSearch(arr, 7));
System.out.println();
}

public static int binaryLeftSearch(int[] arr,int target){
int len=arr.length;
int lo=0,hi=len-1;
while(lo<hi){
int mid=lo+(hi-lo)/2;
if(arr[mid]<target){
lo=mid+1;
}
else{
hi=mid;
}
}
return lo;
}

public static int binaryRightSearch(int[] arr,int target){
int len=arr.length;
int lo=0,hi=len-1;
while(lo<hi){
int mid=lo+(hi-lo+1)/2;
if(arr[mid]>target){
hi=mid-1;
}
else{
lo=mid;
}
}
return hi;
}
}


输出

12

16
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: