若已知数组不存在value,想找第一个大于value的索引位置,左边界二分更合适
public int fun(){
int[] arr = new int[]{1,3,6,9,11,17};
int n = arr.length;
int left =0;
int right = n-1;
int value = 5;
//int pos =0;
while(left<=right){// 结束条件: left == right+1
int mid = left+(right-left)/2;
if(arr[mid]<value){
//pos = mid;
left = mid+1;
}else{
right = mid-1;
}
}
return left;
}
public int fun(){
int[] arr = new int[]{1,3,6,9,11,17};
int n = arr.length;
int left =0;
int right = n-1;
int value = 5;
//int pos =0;
while(left<=right){// 结束条件: left == right+1
int mid = left+(right-left)/2;
if(arr[mid]<=value){
//pos = mid;
left = mid+1;
}else{
right = mid-1;
}
}
return left-1; // left-1才是真实位置(因为left = mid+1;)
}
若已知数组不存在value,想找第一个大于value的索引位置,左边界二分更合适
原文:https://www.cnblogs.com/jobyterry/p/14613674.html