题目描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
示例:输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4]
java代码:
class Solution {
private int extremeInsertionIndex(int[] nums,int target,boolean left) {
int lo = 0;
int hi = nums.length;
while(lo < hi) {
int mid = (lo + hi) / 2;
if(nums[mid] > target || (left && target == nums[mid])) {
hi = mid;
}else {
lo = mid + 1;
}
}
return lo;
}
public int[] searchRange(int[] nums, int target) {
int[] targetRange = {-1,-1};
int leftldx = extremeInsertionIndex(nums,target,true);
if(leftldx == nums.length || nums[leftldx] != target) {
return targetRange;
}
targetRange[0] = leftldx;
targetRange[1] = extremeInsertionIndex(nums,target,false) - 1;
return targetRange;
}
}