考点:二分查找
思路
折半查找即可,注意保存左端点和右端点
var searchRange = function(nums, target) {
let min = -1, max = -1;
const bisearch = (left, right) => {
// 递归终止条件
if(left > right) return;
// 中点
const half = left + Math.floor((right - left) / 2);
// 判断是否需要递归
let searchLeft = true, searchRight = true;
// 如果中点等于target
if(nums[half] === target) {
// 如果中点为0或者中点前一位的元素小于target
// 此时说明中点位置即为开头
// 那么也不需要去查找左边的部分了
// 中点后一位元素大于target时同理
if(half === 0 || nums[half - 1] < target) {
min = half;
searchLeft = false;
}
if(half === nums.length - 1 || nums[half + 1] > target) {
max = half;
searchRight = false;
}
}
// 递归查找中点左边和右边
searchLeft && bisearch(left, half - 1);
searchRight && bisearch(half + 1, right);
}
bisearch(0, nums.length - 1);
return [min, max];
};