题目信息
给定一个按照升序排列的整数数组 nums,和一个目标值 target
找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
示例 1:
输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]
示例 2:
输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]
示例 3:
输入:nums = [], target = 0
输出:[-1,-1]
解法:
实现代码:
public int[] searchRange(int[] nums, int target) {
//特判
if(nums.length==0){
return new int[]{-1,-1};
}
int l=0,r=nums.length-1;
//找第一个target
while (l<r){
int mid=l+r>>1;
if(nums[mid]>=target){
r=mid;
}else {
l=mid+1;
}
}
//找完后,如果nums[r】!=target说明找不到,返回-1,-1
if(nums[r]!=target){
return new int[]{-1,-1};
}
//用L记录r,再找最后一个target
int L=r; r= nums.length-1;
l=0;
while (l<r){
int mid=r+l+1>>1;
if(nums[mid]<=target){
l=mid;
}else{
r=mid-1;
}
}
return new int[]{L,r};
}