方法一:暴力解法
var searchRange = function(nums, target) {
let left = 0;let right = nums.length-1;
let stack = [];
while(left<=right){
if(nums[left]===target&&nums[right]===target){
stack[0] = left;
stack[1] = right;
return stack;
}
if(nums[left]===target){
stack[0] = left;
if(stack[1]!==undefined)return stack;
}else{
left++;
}
if(nums[right]===target){
stack[1] = right;
if(stack[0]!==undefined)return stack;
}else{
right--;
}
}
if(stack[0]===undefined)stack[0]=-1;
if(stack[1]===undefined)stack[1]=-1;
return stack;
};
方法二:二分查找,分别查找左边和右边
var searchRange = function(nums, target) {
let start = jude(nums,target,true);
let end = jude(nums,target,false) - 1;
if(start<=end&&end<nums.length&&nums[start]===target&&nums[end]===target){
return [start,end];;
}
return [-1,-1];
};
function jude(nums,target,ifTrue){
let left = 0;
let right = nums.length-1;
let ans = nums.length;
while(left<=right){
let mid = Math.floor((left+right)/2);
if(nums[mid]>target||(nums[mid]>=target&&ifTrue)){
right = mid - 1;
ans = mid;
}else{
left = mid + 1;
}
}
return ans;
}