- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565644 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174916
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
34. 在排序数组中查找元素的第一个和最后一个位置2 w+ c# H. @( R. D- {' z
难度中等
8 B9 |4 U( U/ U, ?7 \' y给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
- H/ x, x m3 f* f1 y) X' p3 f如果数组中不存在目标值 target,返回 [-1, -1]。
7 c, A/ H) E5 @, D# g Z你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。; |- y6 e, k1 N. d( x2 |1 e' @
) s4 x/ C& G: T) l7 \" V
示例 1:0 q- e, }8 |( @6 j- G2 t
输入:nums = [5,7,7,8,8,10], target = 8
8 S9 N+ w: i' b2 ~$ n5 I0 T输出:[3,4]' `* \; v% \: t% k
示例 2:
( v) Y. |, {! X6 }输入:nums = [5,7,7,8,8,10], target = 6
y Q( i- T& D5 Z输出:[-1,-1], H" G8 y0 t3 e& ?0 p
示例 3:; B, ^: v- Z+ |6 W
输入:nums = [], target = 07 Z+ p, Q8 h/ V& z$ o( F9 K
输出:[-1,-1]
% J1 B5 P5 x4 B1
0 X; B% }" x% E$ t+ k2, K0 F, K$ g; Q& b
3+ R) X* G4 }" X$ `& L; E
4
: h d9 v- ?/ o4 i! f5: y9 _$ a0 _" D5 `6 d0 e2 ~
6
# v3 o6 _, N3 c9 N7
9 N0 } |( s" ~ o; ?& j8: a/ O; k! M: h# B0 ^1 I
9
7 ?8 T3 F, K2 n: g3 D提示:/ f/ `- o& v; \, N. O3 j. b. b
5 @) D; S, f u2 `, \
0 <= nums.length <= 10(5)
\/ U# I% h# I" j; q6 Y-10(9) <= nums[i] <= 10(9)
, U* E" M8 j$ J2 E# P, N" A, x4 Qnums 是一个非递减数组
2 `6 F5 \4 x* c3 N0 Y-10(9) <= target <= 10(9)! E' s8 l( B) |2 V9 w
思路0 Q$ H5 u' `" e. f& u7 V2 M& W
关键步骤,与二分查找不同
4 s8 Y' d! T( s; r# Pif(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);7 ^0 J9 Y3 C( ?* N7 N7 E
target==nums[mid]时,不结束循环,继续进入
" I2 E; M1 m4 \& j" q两个if可以同时进入,寻找界限
, u6 y, x; h5 f8 R( M设置限制,防止mid-1,mid+1越界
$ ?1 L) q- m7 w7 @代码
) ^, x# \9 g" Q9 Oclass Solution {
" s8 |9 ?5 s+ G9 g5 Q3 S3 C% Jpublic:& u! O4 |' U; L4 a [
int left=-1,right=-1;# y- g4 T1 H7 b/ b+ v
vector<int> searchRange(vector<int>& nums, int target) {7 x: C2 P8 M& E; C
if(nums.size()==0) return vector<int>{-1,-1};% V6 I& G+ D% g6 Y$ O3 K
binary_search(nums,target,0,nums.size());
: Q: B" Q/ w7 `. o$ U) h% s' h2 l5 z return vector<int>{left,right};0 B) r& n2 ?0 K W, R
}0 u o" N! {( H
void binary_search(vector<int>& nums,int target,int l ,int r){, I7 S6 d( X/ p+ ?1 U
int mid=(r-l)/2+l;3 I- b' `6 P% k4 u, q
//printf("%d-%d\n",l,r);4 M& P% g I1 E. h
if(target==nums[mid]){8 ?9 t8 B: H1 s* x
if(left>mid||left<0) left=mid;
8 y! h D; b4 f; w& h1 v" m if(right<mid||right<0) right=mid;
& ~% h+ \" F6 |; E }
9 V' v3 K s9 o$ k; B if(l>=r) return;
" z/ v [1 r! Y, X if(target<=nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);8 x9 v! w! F: z5 R$ a& |1 }7 F: M
if(target>=nums[mid]&&mid+1<nums.size()) binary_search(nums,target,mid+1,r);/ j& q1 C. h. K. b& I
}
$ e) k- J* g; N2 W};! O4 e) U. @* D3 Q( I
" n! h9 @" v/ \! [( H* O* w
————————————————5 g& }: v! Y, y) A+ U
版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。: a6 q3 H" u% c+ J2 a% U
原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832
6 V5 i1 F( ?' X" }' D) p: o" W) {& f5 Q
6 ?/ f+ m& G( V) B& m1 k
|
zan
|