34 在排序陣列中查詢元素的第乙個和最後乙個位置

2021-10-10 17:25:50 字數 1294 閱讀 7411

給定乙個按照公升序排列的整數陣列 nums,和乙個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。

你的演算法時間複雜度必須是 o(log n) 級別。

如果陣列中不存在目標值,返回 [-1, -1]。

示例 1:

輸入: nums = [5,7,7,8,8,10], target = 8

輸出: [3,4]

示例 2:

輸入: nums = [5,7,7,8,8,10], target = 6

輸出: [-1,-1]

方法一:api

var

searchrange

=function

(nums, target)

;

方法二:

線性查詢:從頭遍歷找到第乙個位置,從尾遍歷找到最後乙個位置。

var

searchrange

=function

(nums, target)}if

(res[0]

==-1)

return res;

for(

let j = nums.length-

1;j>=i;j--)}

return res;

};

複雜度分析

時間複雜度: o(n)。

空間複雜度: o(1)。線性掃瞄方法使用了固定大小的陣列和幾個整數,所以它的空間大小為常數級別的。

方法 三:二分查詢

因為陣列已經排過序了,我們可以使用二分查詢的方法去定位左右下標。

var

searchrange

=function

(nums, target)

else

if(nums[mid]

< target)

else}if

(index ==-1

)return[-

1,-1

];for(

let i = index;i>=

0;i--)}

for(

let j = index;jreturn

[left,right];}

;

複雜度分析

時間複雜度:o(log n) 。由於二分查詢每次將搜尋區間大約劃分為兩等分,所以至多有 ⌈logn⌉ 次迭代。最壞為o(nlogn)。

空間複雜度:o(1) 。所有工作都是原地進行的,所以總的記憶體空間是常數級別的。

34 在排序陣列中查詢元素的第乙個和最後乙個位置

給定乙個按照公升序排列的整數陣列nums,和乙個目標值target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是o log n 級別。如果陣列中不存在目標值,返回 1,1 輸入 nums 5,7,7,8,8,10 target 8 輸出 3,4 輸入 nums 5,7,7,...

34 在排序陣列中查詢元素的第乙個和最後乙個位置

給定乙個按照公升序排列的整數陣列nums,和乙個目標值target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是 o log n 級別。如果陣列中不存在目標值,返回 1,1 示例 1 輸入 nums 5,7,7,8,8,10 target 8輸出 3,4 示例 2 輸入 n...

34 在排序陣列中查詢元素的第乙個和最後乙個位置

給定乙個按照公升序排列的整數陣列nums,和乙個目標值target。找出給定目標值在陣列中的開始位置和結束位置。你的演算法時間複雜度必須是 o log n 級別。如果陣列中不存在目標值,返回 1,1 示例 1 輸入 nums 5,7,7,8,8,10 target 8輸出 3,4 示例 2 輸入 n...