QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2650|回复: 0
打印 上一主题 下一主题

[其他资源] 34. 在排序数组中查找元素的第一个和最后一个位置

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-5 16:45 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    34. 在排序数组中查找元素的第一个和最后一个位置
    3 `. u. A* `# d  d难度中等
    9 m5 N4 p) t' P5 d给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
    + w& i2 B- T5 q$ r5 F如果数组中不存在目标值 target,返回 [-1, -1]。% Q) H8 a8 a& E8 n
    你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
    $ f8 q4 c4 F) R) _: o7 d3 T7 B) N- l$ j5 u
    示例 1:
    & h# J  v" \  _输入:nums = [5,7,7,8,8,10], target = 8
    3 V  V+ k6 [+ e3 k& D输出:[3,4]
    & I, T& y9 e9 o4 {6 p$ ]! R示例 2:/ l8 l1 Q7 f- _' b( b
    输入:nums = [5,7,7,8,8,10], target = 6. L% Q% v1 c" J" j. H# m. w, P! [
    输出:[-1,-1]- Y9 n9 Q4 ?: S! j  o
    示例 3:( m- m! n4 f& `! N
    输入:nums = [], target = 0
    4 |; N. v' m9 C# P' ]输出:[-1,-1]
    6 ?& [* p2 q# _5 x) f14 n; E1 R' W+ \& w
    2
    ; X1 i; @. @9 a7 J' z3
    9 n4 Q9 e$ d( ~" k+ h" y4( n2 [0 j% s/ u# O7 C7 e
    5
    ( A# z) l2 x, `6
    & N; {  ]. I. i( X( {& C, C7% L+ _8 G3 O7 {) s% S
    86 T, w) B8 ^2 R8 v! K8 J8 v% F
    9
    + ~- q& Y6 M% n9 y) H1 t提示:. Q, d4 W- z$ Y- d

      J, Q- K$ R' ]: t0 <= nums.length <= 10(5)
    : T4 x/ ~3 j8 X9 {-10(9) <= nums[i] <= 10(9)0 |6 \$ [  S6 b; b* r. t3 c4 A
    nums 是一个非递减数组1 m7 _4 e  s* i, {% f& t- p
    -10(9) <= target <= 10(9)4 p* a* l' r+ H& j6 V
    思路
    ! e5 @4 e. o( T0 u' M- m% a关键步骤,与二分查找不同" k7 G! p! Z, I4 J7 K, H: v
    if(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);
    & E+ C( |, {' _2 E" p3 utarget==nums[mid]时,不结束循环,继续进入
    1 |/ M; V" J: C1 P/ G- [两个if可以同时进入,寻找界限7 L( e: {/ I- Q, w$ i6 B1 c! g
    设置限制,防止mid-1,mid+1越界& a; A% W  _8 `4 e& I
    代码
    ) F1 m/ [( {* l. l! b4 @9 j5 D/ Hclass Solution {$ q1 O* Y: j! k9 T) \, q. Q, N: b0 h
    public:( T  g8 z! B$ G/ j
        int left=-1,right=-1;
    ! M; R" d, s5 o) i( m    vector<int> searchRange(vector<int>& nums, int target) {
    ! a% K# Q3 a1 _3 _& x        if(nums.size()==0)  return vector<int>{-1,-1};
    5 M% D7 o, R% w1 ~6 ]$ w# X" d% C- @        binary_search(nums,target,0,nums.size());
    9 h+ ?( }( [+ D* ?2 J* g7 X  M        return vector<int>{left,right};* c: M2 a0 d  |7 k7 H# @, c
        }& u; h5 ^& R/ Y; ]4 C
        void binary_search(vector<int>& nums,int target,int l ,int r){8 x  p/ ]+ m% k
            int mid=(r-l)/2+l;" Q3 i% J  E) v8 Z% k
            //printf("%d-%d\n",l,r);" C; V0 ^3 G0 ?
            if(target==nums[mid]){. ]' Z% }! h: H$ a! i: n8 i
                if(left>mid||left<0)  left=mid;
    & |6 `. N3 u$ z/ I  Q4 T" v" ~; }            if(right<mid||right<0)   right=mid;
    " z" x' }) j4 w! z, K        }4 U' t) |; {: K
            if(l>=r) return;0 g8 o0 g: @4 P( q0 ?( P2 V- N7 G
            if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);
    6 O0 t2 k& z: {  [        if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);
      f5 c8 T* m. l, y5 _    }6 A7 {8 i6 G  ?9 u& c9 q
    };
    9 B" M+ s5 y7 U; z) w7 [- [% n
    ! j" N: Q" W, N) c, n: {+ u: A0 G0 ?————————————————
    - I% v: n; X3 Q! H5 O2 U8 d& w0 q8 z版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。% q1 C! K, a# a/ ?
    原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832
    : r) _* c$ b' ~6 N7 ^4 r2 F# o& t) Q8 _" Y
    ! B. P, G2 s4 h6 ]
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-7-9 18:43 , Processed in 0.439640 second(s), 51 queries .

    回顶部