image.png
java语言描述
class Solution {
//两次二分查找 二段式
public int[] searchRange(int[] nums, int target) {
int[] targetRange = {-1, -1};
if(nums==null || nums.length==0)
return targetRange;
int l=0 , r=nums.length-1;
while(l<r){
//找出第一个target出现的下标
//范围缩小到target左边的区间,输出区间的右端点
int mid=(l+r)/2;
if(nums[mid]>=target)
r=mid;
else
l=mid+1;
}
if(nums[r]!=target)
return targetRange;
int start=r;
int a=0 , b=nums.length-1;
while(a<b){
//找出最后一个target出现的下标
//范围缩小到target右边的区间,输出区间的左端点
int mid=(a+b+1)/2;
if(nums[mid]<=target)
a=mid;
else
b=mid-1;
}
int end=a;
return new int[]{start,end};
}
}