讲的二分不错 所有情况都考虑了
左闭右闭 左闭右开 左开右开,,没讲左开右闭
还有条件大于等于 大于 小于等于 小于的条件的转换
class Solution {
public int[] searchRange(int[] nums, int target) {
int i = lwo_bound(nums, target);
if(i == nums.length || nums[i] != target){
return new int[]{-1,-1};
}
int i1 = lwo_bound(nums, target + 1) - 1;
return new int[]{i,i1};
}
int lwo_bound(int[] nums,int target){ //返回有序数组第一个>=8的位置,否则返回数组长度 左闭右闭写法
int left = 0;
int right = nums.length-1;
while(left <= right){
int mid = (left+right)/2;
if(nums[mid] < target){
left = mid +1;
}else{
right = mid - 1;
}
}
return left;
}
int lwo_bound2(int[] nums,int target){ //返回有序数组第一个>=8的位置,否则返回数组长度 左闭右开写法
int left = 0;//left-1始终是小于target的 right+1始终是大于等于target的
int right = nums.length;
while(left < right){
int mid = (left+right)/2;
if(nums[mid] < target){
left = mid +1;
}else{
right = mid;
}
}
return left;
}
int lwo_bound3(int[] nums,int target){ //返回有序数组第一个>=8的位置,否则返回数组长度 左开右开写法
int left = -1;//left-1始终是小于target的 right+1始终是大于等于target的
int right = nums.length;
while(left + 1< right){
int mid = (left+right)/2;
if(nums[mid] < target){
left = mid;
}else{
right = mid;
}
}
return right;
}
}