1、题目描述
给定一个按照升序排列的整数数组 nums,和一个目标值 target。
找出给定目标值在数组中的开始位置和结束位置。
算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
2、解题思路
1、使用二分法
2、如果最终找到的中值前或后的值相同则扩展边界
3、解题代码
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var searchRange = function(nums, target) {
let S = 0, L = nums.length - 1, M;
while (S <= L) {
M = (S + L) >> 1;
if (nums[M] === target) break;
if (nums[M] > target) L = M - 1;
else S = M + 1;
}
if(S > L) return [-1, -1];
let i = j = M;
while(nums[i] === nums[i - 1]) i--;
while(nums[j] === nums[j + 1]) j++;
return [i, j];
};