题目

方法一:暴力解法

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;
}