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

2021-10-16 22:55:04 字數 1314 閱讀 6885

題目描述

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

如果陣列中不存在目標值target,返回[-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]

示例3:

輸入:nums = , target = 0

輸出:[-1,-1]

題解:肯定的該題是用二分,而且是兩次二分。第一次二分找到target的左邊界,第二次以左邊界為起點找到右邊界即可。

那麼此題重點考察的就是二分的細節了。

二分比較容易死迴圈的情況就是nums[mid]的劃分,舉個例子:nums = [2, 3], target = 2

通俗點就是:

如果nums[mid]劃分到左區間,就採用mid = (l + r) / 2)如果nums[mid]劃分到右區間,就採用mid = (l + r + 1) / 2

**:

class

solution

;int l =

0, r = n -

1, m;

while

( l < r )

if( nums[r]

!= target )

return

; vector<

int> ret;

ret.

push_back

( r )

; l = r, r = n -1;

while

( l < r )

ret.

push_back

( r )

;return ret;}}

;/*記憶體:13.3mb,擊敗:98.83%

*/

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...