二分就记得是边界条件真是日了狗,一个月不看就忘光了 算法咋这么难,艹
这玩意就像一个二叉树一样,所以时间复杂度就是logn嘛
kafka的日志缩影也用到了二分,kafka 牛逼
二分法是基于有序数组实现的,因为他要随机访问地址啊,啥也别说了,写个二分算求
public int search(int[] arr,int target){
if(arr==null){
return -1;
}
int low = 0;
int high = arr.length-1;
while (low<high){
int mid = (low+high)/2;
if(arr[mid]==target){
return mid;
}else if(target>arr[mid]){
low = mid+1;
}else {
high = mid -1;
}
}
return -1;
}
递归做法
public int rsearch(int arr[],int low,int high,int targer){
if(low>high){
return -1;
}
int mid = (low+high)/2;
if(arr[mid] == targer){
return mid;
}else if(targer>arr[mid]){
return rsearch(arr,mid+1,high,targer);
}else {
return rsearch(arr,low,mid-1,targer);
}
}