letcode每日一题-在排序数组中查找元素的第一个和最后一个位置
话不多说,直接上题!!!
题目简介:
思路:
我们根据题目可知:1.nums升序排列的整数数组 2.我们需要找出给定目标值在数组中的开始位置和结束位置。
有序数组,寻找指定目标值的位置不用多想必然时采用二分查找啦!
代码如下:
public int[] searchRange(int[] nums, int target) {
int[] result=new int[]{-1,-1};
binarySearch(0,nums.length-1,nums,target,result);
return result;
}
//二分查找
public void binarySearch(int begin,int end,int[] nums,int target,int[] result){
if(begin>end){
return;
}
int mid=(begin+end)/2;
if(nums[mid]==target){
//等于目标值
int i=mid;
//寻找左边界
for(;i>=begin;i--){
if(nums[i]<target){
i=i+1;
break;
}
}
result[0]=Math.max(i,begin);
i=mid;
//寻找右边界
for(;i<=end;i++){
if(nums[i]>target){
i=i-1;
break;
}
}
result[1]=Math.min(i,end);
}else if(nums[mid]<target){
//比目标值小,向左查找
binarySearch(mid+1,end,nums,target,result);
}else{
//比目标值大,向右查找
binarySearch(0,mid-1,nums,target,result);
}
}
运行表现,虽然我们可能不是最优美的,但是我们是最快的: