題目描述
給定乙個按照公升序排列的整數陣列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...