问题: 给定一个有序数组(该数组元素可能含有相同值)和一个目标值,找出目标值的起止下标,如果数组不含邮该目标值,则返回【-1,-1】。要求时间复杂度为O(log(n)),n为数组长度。
思路: 二分查找,分别找到目标值的上下边界。
java代码:
int[] searchRange(int A[],int target){
int[] range=[-1,-1];
int lower=0,upper=A.length,mid;
if(A[upper-1]<target)
return range;
while(lower<upper){
mid=(lower+upper)/2;
if(A[mid]<target)
lower=mid+1;
else
upper=mid;
}
if(A[lower]!=target)
return range;
range[0]=lower;
upper=A.length;
while(lower<upper){
mid=(lower+upper)/2;
if(A[mid]>target)
upper=mid;
else
lower=mid+1;
}
range[1]=upper-1;
return range;
}