/*
* @lc app=leetcode.cn id=34 lang=typescript
*
* [34] 在排序数组中查找元素的第一个和最后一个位置
*/
//左闭右开版本
// @lc code=start
function searchRange(nums: number[], target: number): number[] {
let left = 0,
right = nums.length,
result = [-1, -1];
const leftmid: number = getlef(nums, left, right, target);
const rightmid: number = getright(nums, left, right, target);
if (rightmid - leftmid > 1) {
result = [leftmid + 1, rightmid - 1];
}
return result;
}
let getlef = (nums: number[], left: number, right: number, target: number) => {
let leftmid = nums.length;
while (left < right) {
let middle = left + ((right - left) >> 1);
if (nums[middle] < target) {
left = middle + 1;
} else {
right = middle;
leftmid = right - 1;
}
}
return leftmid;
};
let getright = (
nums: number[],
left: number,
right: number,
target: number
) => {
let rightmid = 0;
while (left < right) {
let middle = left + ((right - left) >> 1);
if (nums[middle] > target) {
right = middle;
} else {
left = middle + 1;
rightmid = left;
}
}
return rightmid;
};
// @lc code=end