题目描述:
标签:数组? 二分查找
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回?[-1, -1]。
进阶:
你可以设计并实现时间复杂度为?O(log n)?的算法解决此问题吗?
?代码:
思路分析:
1、找到目标值的下标,和常规的二分查找没啥不同;
2、主要是需要找到区间的范围,这里用了while循环来找,注意begin=-2,end=0的初值这样设置的原因主要是如果找不到区间,最后要返回{begin+1,end-1}为了保持题目要求的找不到返回[-1,-1],所以这样设置。
class Solution {
public int[] searchRange(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
int begin = -2;
int end = 0;
while(left <= right){
int mid = left + (right - left) / 2;
if(nums[mid] < target){
left = mid + 1;
}else if(nums[mid] > target){
right = mid - 1;
}else{
begin = mid;
end = mid;
while(begin >= 0 && nums[begin] == target){
begin--;
}
while(end < nums.length && nums[end] == target){
end++;
}
break;
}
}
return new int[]{begin+1, end-1};
}
}
|