diff --git a/problems/0034.在排序数组中查找元素的第一个和最后一个位置.md b/problems/0034.在排序数组中查找元素的第一个和最后一个位置.md index 68dd797d..33694577 100644 --- a/problems/0034.在排序数组中查找元素的第一个和最后一个位置.md +++ b/problems/0034.在排序数组中查找元素的第一个和最后一个位置.md @@ -396,6 +396,46 @@ class Solution: ## JavaScript ```js +var searchRange = function(nums, target) { + const getLeftBorder = (nums, target) => { + let left = 0, right = nums.length - 1; + let leftBorder = -2;// 记录一下leftBorder没有被赋值的情况 + while(left <= right){ + let middle = left + ((right - left) >> 1); + if(nums[middle] >= target){ // 寻找左边界,nums[middle] == target的时候更新right + right = middle - 1; + leftBorder = right; + } else { + left = middle + 1; + } + } + return leftBorder; + } + + const getRightBorder = (nums, target) => { + let left = 0, right = nums.length - 1; + let rightBorder = -2; // 记录一下rightBorder没有被赋值的情况 + while (left <= right) { + let middle = left + ((right - left) >> 1); + if (nums[middle] > target) { + right = middle - 1; + } else { // 寻找右边界,nums[middle] == target的时候更新left + left = middle + 1; + rightBorder = left; + } + } + return rightBorder; + } + + let leftBorder = getLeftBorder(nums, target); + let rightBorder = getRightBorder(nums, target); + // 情况一 + if(leftBorder === -2 || rightBorder === -2) return [-1,-1]; + // 情况三 + if (rightBorder - leftBorder > 1) return [leftBorder + 1, rightBorder - 1]; + // 情况二 + return [-1, -1]; +}; ``` -----------------------