From f34b2472643b6ebc98b16856b90f25835294c0c1 Mon Sep 17 00:00:00 2001 From: jerryfishcode <91447694+jerryfishcode@users.noreply.github.com> Date: Mon, 27 Sep 2021 21:34:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E34.=E6=9C=B4=E5=AE=9E?= =?UTF-8?q?=E6=97=A0=E5=8D=8E=E7=9A=84=E4=BA=8C=E5=88=86=E6=9F=A5=E6=89=BE?= =?UTF-8?q?=20JavaScript=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...元素的第一个和最后一个位置.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) 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]; +}; ``` -----------------------