我是通过两部分的二分查找完成这道题的
首先把该问题遇到的情况分为三种,第一种:target位于数组的所有数字左边或者右边,返回【-1,-1】
第二种:target在数组的范围内,但是数组里面没有与target相等的数字,即返回【-1,-1】
第三种:target在数组里面有相等的数字,返回对应的数组下标范围;
class Solution {
public int[] searchRange(int[] nums, int target) {
代码主体,通过调用两个方法进行搜索左右边界
int Boundaryleft=getleft(nums,target);
int Boundaryright=getright(nums,target);
if(Boundaryleft==-2 || Boundaryright==-2){
return new int[]{-1,-1};
}//情况一
if(Boundaryright-Boundaryleft>1){
return new int[]{Boundaryleft+1,Boundaryright-1};
}//情况三
return new int[]{-1,-1};
}//情况二
int getleft(int[] nums, int target){
//寻找左边界
int left=0;
int right=nums.length-1;
int leftborder=-2;
while(left<=right){
int mid=left+(right-left) /2;
if(nums[mid]>=target){
right=mid-1;
leftborder=right;
}
else{
left=mid+1;
}
}
return leftborder;
}
int getright(int[] nums, int target){
//寻找右边界
int left=0;
int right=nums.length-1;
int rightborder=-2;
while(left<=right){
int mid=left+(right-left) /2;
if(nums[mid]>target){
right=mid-1;
}
else{
left=mid+1;
rightborder=left;
}
}
return rightborder;
}
}