- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563314 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174217
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
34. 在排序数组中查找元素的第一个和最后一个位置
+ m3 }& m, i/ w# X难度中等( P H' v: i% E; t2 ?6 K3 _3 I/ Z# E
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
' C3 A/ o4 P0 L# C5 U1 g9 x如果数组中不存在目标值 target,返回 [-1, -1]。3 G: w0 _7 p& t
你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。7 I$ ^# |; J+ N- E
5 h! C/ W6 q. Z3 @+ l示例 1:6 X, f& _! X; |; u
输入:nums = [5,7,7,8,8,10], target = 8
& F- z$ w* |; {# D$ f输出:[3,4]# ?! _2 s! Z) ?( N& I- p- x& h, [
示例 2:
) w6 L' _; V% _& W" n0 N输入:nums = [5,7,7,8,8,10], target = 6
; j% y5 [+ E4 q" n; n/ Y! n输出:[-1,-1]
8 ?1 }8 c: N, L示例 3:
% ]8 }; |- W( u5 j* s) m) a输入:nums = [], target = 0
/ \' c, N, |" c0 i7 f0 \2 M, c/ A输出:[-1,-1]
7 A, {6 F" [/ L, z: Z. z9 q- O" s7 l1- T9 n6 w6 ?! \6 C; {8 k- E8 {: J- i
2
O) {9 Q3 ^) N- c! D( \3- ?, U' f2 n9 `! N
4
8 w7 W/ | r+ e" ]5
; `" b8 |1 k3 T5 G% ]69 h4 W% L- Z8 L+ `' [$ N( } x
7
5 w8 Z y! N! z2 c1 z$ C8/ A6 s6 Q; Z+ p& n* |2 ?
9
8 u! E8 B h/ O& @! |) C' Y7 t提示:1 V! F6 I" ^8 E' ~5 C
( ~7 J M" P Z6 V0 <= nums.length <= 10(5)# [7 ^7 G/ k: K8 L& \
-10(9) <= nums[i] <= 10(9)1 a- Q$ ]$ Z+ e/ I0 j
nums 是一个非递减数组
' F1 R& E/ Q5 r) ^4 y-10(9) <= target <= 10(9)1 X$ h% J, n- L$ p7 l$ \1 g
思路% R/ j& r5 R3 _2 m) {' q* o: \! s" z
关键步骤,与二分查找不同
8 k# D1 g, Y% Fif(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);
: C, V" K3 ?% }' c+ \ y. utarget==nums[mid]时,不结束循环,继续进入
- i4 P3 t, n9 L( h! f, ~% o两个if可以同时进入,寻找界限: ~9 `' L9 e# F" d t" [
设置限制,防止mid-1,mid+1越界
" B1 @+ j2 h; ], Y8 M' {代码3 K9 W* U* _6 ]2 o
class Solution {
5 L/ m, Y* w$ Ipublic:
2 q) Q$ z3 Q% g( _& l( s+ F! a$ _ int left=-1,right=-1;, R; A* s9 q% E' X
vector<int> searchRange(vector<int>& nums, int target) {
' f5 g8 G/ H4 j0 V; R# ]0 Z, Z if(nums.size()==0) return vector<int>{-1,-1};, J8 Z u1 ?$ U
binary_search(nums,target,0,nums.size());2 x% J0 b7 z8 P
return vector<int>{left,right};0 p/ n/ Z9 |1 [
}
# [) C+ [$ N5 c9 r1 D+ T void binary_search(vector<int>& nums,int target,int l ,int r){& L4 u4 u1 a5 Q9 S( D2 N6 d; c
int mid=(r-l)/2+l;- Z! x; r3 m% n0 ?6 f, z0 v( x) K* A
//printf("%d-%d\n",l,r);
} O2 N' y7 G( E if(target==nums[mid]){
3 X+ l7 S) e/ p4 K if(left>mid||left<0) left=mid;
- K c8 ~) L! s3 \; X: u! J% O if(right<mid||right<0) right=mid;
+ q o# f2 @, \* `8 T }
6 j4 q5 {9 ^- V' ^0 u9 p8 e if(l>=r) return;
+ F1 z5 X- E+ d f0 g if(target<=nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);* q7 u3 B, p4 l# w U& h" {& \
if(target>=nums[mid]&&mid+1<nums.size()) binary_search(nums,target,mid+1,r);6 ?9 O/ ~- w6 ]* @' H8 a
}0 b4 A4 ~& F! A: B" ?# y- p4 n
};0 U+ V; T& p# P. A/ G8 d9 [( J: h
6 V* h/ T3 n' i
————————————————
0 V1 L& }9 E0 v; e C, c5 `版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。! o$ O3 z9 z% }7 _5 _! y% `) H
原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832
/ b. P9 c. m2 P' ]+ b# M1 ~4 X7 I7 _- J, G7 W5 E: O' m, r. Z
1 w" n: t% M8 u1 v& |! ~& a
|
zan
|