原题如下:
Leetcode34
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
因为题目要求使用 O(logn) 的写法,所以第一时间想到的就是二分查找,在二分查找的过程中,一旦找到 target 以后,就可以直接沿着mid进行遍历:
class Solution {
public int[] searchRange(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
int[] ans = new int[]{-1,-1};
while(left <= right){
int mid = (left + right) / 2;
if(nums[mid] == target){
int rightIndex = mid;
while(mid > 0 && nums[mid - 1] == target){
mid--;
}
ans[0] = mid;
while(rightIndex < right && nums[rightIndex + 1] == target){
rightIndex++;
}
ans[1] = rightIndex;
return ans;
} else if(nums[mid] > target){
right = mid - 1;
} else {
left = mid + 1;
}
}
return ans;
}
}