题目描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
思路:用两次二分查找,分别找出该元素的上限,和下限,主要是找到目标值后并不用立即跳出循环,而是继续让它执行,直到左右指针重合;然后就找到了该值的范围
代码:
class Solution {
public int[] searchRange(int[] nums, int target) {
int left = 0;
int right = nums.length-1;
int[] ans = {-1,-1};
while(left<=right)
{
int mid = left +(right-left)/2;
if(target>nums[mid])
{
left = mid+1;
}
else if(target<nums[mid]){
right = mid -1;
}
else{
int pre = mid;
int rear = mid;
for(int i=pre;i>=0;i--)
{
if(nums[i]==target)
{
ans[0] = i;
}
}
for(int j=rear;j<nums.length;j++)
{
if(nums[j]==target)
{
ans[1] = j;
}
}
return ans;
}
}
return ans;
}
}