搜索左侧边界:
long left_bound(int target) {
long lo = 0, hi = Long.MAX_VALUE;
while(lo<hi){
long mid=lo+(hi-lo)/2;
if(trailingZeroes(mid)<target){
lo=mid+1;
}else if(trailingZeroes(mid)>target){
hi=mid;
}else{
hi=mid;
}
}
return lo;
}
搜索右侧边界:
long right_bound(int target) {
long lo = 0, hi = Long.MAX_VALUE;
while(lo<hi){
long mid=lo+(hi-lo)/2;
if(trailingZeroes(mid)<target){
lo=mid+1;
}else if(trailingZeroes(mid)>target){
hi=mid;
}else{
lo=mid+1;
}
}
return lo-1;
}
注意:区间是左闭右开,另外搜索左侧区间要确保mid左侧还有没有等于target的,搜索右侧区间要确保mid右侧还有没有等于target的