//用二分查找找到小于或者等于k的最大值
//相同数字的右边界
public static int uperK(int[] nums,int target){
int len = nums.length;
if(len == 0 ) return -1;
int l = 0 , r = len - 1;
int mid = 0;
while(l < r){
//取高位防止死循环
mid = (l + r + 1) / 2;
if(nums[mid] <= target){
l = mid;
}else{
r = mid - 1;
}
}
if(nums[l] <= target) return l;
return -1;
}
//二分查找大于或等于k的最小值
public static int downK(int[] nums , int target){
int len = nums.length;
if(len == 0 ) return -1;
int l = 0 , r = len - 1;
int mid = 0;
while( l < r){
mid = (l + r) / 2;
if(nums[mid] >= target){
r = mid;
}else{
l = mid + 1;
}
}
if(nums[l] >= target) return l;
return -1;
}
二分------
最新推荐文章于 2024-07-15 22:27:18 发布