两次二分搜索
class Solution {
public int[] searchRange(int[] nums, int target) {
int[] res={-1,-1};
if(nums==null||nums.length==0){
return res;
}
int start_point=-1;
int end_point=-1;
//寻找左边界
int left=0;
int right=nums.length-1;
while(left+1<right){
int mid=left+(right-left)/2;
if(nums[mid]>=target){
right=mid;
}
else{
left=mid;
}
}
if(nums[left]==target){
start_point=left;
}
else if(nums[right]==target){
start_point=right;
}
if(start_point==-1){
return res;
}
//寻找右边界
left=0;
right=nums.length-1;
while(left+1<right){
int mid=left+(right-left)/2;
if(nums[mid]>target){
right=mid;
}
else{
left=mid;
}
}
//这里必须先判断right再判断left
if(nums[right]==target){
end_point=right;
}
else if(nums[left]==target){
end_point=left;
}
res[0]=start_point;
res[1]=end_point;
return res;
}
}