給定乙個按照公升序排列的整數陣列 nums,和乙個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。方法一:api你的演算法時間複雜度必須是 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]
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...