给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
function searchRange(nums, target) {
let getPreNextIndex = (val,index,arr) => {
let returnArr = [index,index]
if(index == 0){
for(let i = index + 1;i < arr.length;i++){
if(arr[i] == val){
returnArr[1] = i
}else{
break;
}
}
return returnArr
}
if(index == arr.length -1){
for(let i = index - 1;i > -1;i--){
if(arr[i] == val){
returnArr[0] = i
}else{
break
}
}
return returnArr
}
for(let i = index - 1;i > -1;i--){
if(arr[i] == val){
returnArr[0] = i
}else{
break
}
}
for(let i = index + 1;i < arr.length;i++){
if(arr[i] == val){
returnArr[1] = i
}else{
break;
}
}
return returnArr
}
if(nums.length == 1){
if(nums[0] == target){
return [0,0]
}
return [-1,-1]
}
let start = 0,end = nums.length - 1;
while(start <= end){
let mid = parseInt((start + end) / 2);
if(target == nums[mid]){
return getPreNextIndex(mid,nums,target)
}else if(target > nums[mid]){
start = mid + 1
}else if(target < nums[mid]){
end = mid - 1
}
}
return [-1 ,-1]
}
Leecode提交通过