寻找一个有序数组中>=第一个大于某个数的位置:![]()
左端点和右端点都是闭区间的做法[left,right]:
退出循环时候如上图:
//寻找一个有序数组中>=第一个大于某个数的位置,闭区间[left,right]
public int binarysort(int[] nums,int target){
int left=0,right=nums.length-1;
while(left<=right){
//防止溢出
int middle=left+(right-left)/2;
if(nums[middle]<target){
left=middle+1;//[middle+1,right]
}else {
right=middle-1;//[left,middle-1]
}
}
return left;
}
左端点是闭区间,右端点是开区间的做法[left,right):
退出循环时候如右图:
//寻找一个有序数组中>=第一个大于某个数的位置(左闭右开区间[left,right))
public int binarysort1(int[] nums,int target){
int left=0,right=nums.length;
while(left<right){
//防止溢出
int middle=left+(right-left)/2;
if(nums[middle]<target){
left=middle+1;//[middle+1,right)
}else {
right=middle;//[left,middle)
}
}
return left;//or return right
}
左端点是开区间,右端点是开区间的做法(left,right):
退出循环时候如右图:
//寻找一个有序数组中>=第一个大于某个数的位置(左闭右开区间(left,right))
public int binarysort2(int[] nums,int target){
int left=-1,right=nums.length;
while(left+1<right){
//防止溢出
int middle=left+(right-left)/2;
if(nums[middle]<target){
left=middle+1;//(middle,right)
}else {
right=middle;//(left,middle)
}
}
return right;
}
其他类型题目转换:
对于其他四种解释如下
1.大于等于8第一个位置上面已经详细解释。
2.大于8的第一个位置等价于大于等于9的第一个位置。
3.小于8的最后一个位置可以等价于大于等于8的第一个位置再减去1.
4.小于等于8的最后一个位置可以等价于大于等于9的第一个位置再减去1.