QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2605|回复: 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. 在排序数组中查找元素的第一个和最后一个位置/ q4 ]7 [3 L: G9 k+ U
    难度中等
      s, l$ r. Z9 l5 w给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
    6 E9 ?0 B# h: U% B如果数组中不存在目标值 target,返回 [-1, -1]。
    7 s1 k( B" L/ O% G+ U你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。9 Y6 b. E: J# l4 o# g5 M  |
    9 X4 v1 g+ l0 Y, H- q4 X
    示例 1:
    1 X# T" B' q- D* H& h输入:nums = [5,7,7,8,8,10], target = 8
    % ]+ n' W% `0 f! c输出:[3,4], M6 \9 J/ X/ V. k
    示例 2:. I2 e" s4 q6 B  m$ X3 h9 k; p( k
    输入:nums = [5,7,7,8,8,10], target = 6
    + f7 O! Q  s7 k, \) N# P( P输出:[-1,-1]. H" P6 K1 r& a: W5 _
    示例 3:
    + F) H6 X  L6 W8 R4 Q输入:nums = [], target = 09 y) u- x! i" A' S* s! Y
    输出:[-1,-1]
    : ]$ p9 |5 w' L1 [1* N! ]4 R& Z9 Z/ M1 U* W4 H
    2
    1 t# B: w* _5 L9 {3/ l  y1 t- i* l) H+ t0 i) d
    4$ m( @6 C( q- H
    5% u+ e' N  O, G
    6
    5 k" i1 R  h( p9 _& w74 k& {+ f& ]8 H9 q! m: j# w
    8
    + {( D0 ^$ s7 [  K+ q+ s# u4 I94 a2 S( g% K2 ^2 ?9 z" S
    提示:) m. ?3 m9 a) J; r

    & d* V5 U, V; m  W0 <= nums.length <= 10(5): ]$ P( T/ j9 d3 R
    -10(9) <= nums[i] <= 10(9)
    9 o* A, i* j5 Z4 m" Lnums 是一个非递减数组
    ; a( c' t' [* p0 E; s$ p/ k7 n-10(9) <= target <= 10(9)5 w3 I+ r: B( k7 h6 `4 c# K) a0 b
    思路# R! m# V5 x0 I# r
    关键步骤,与二分查找不同
    . |0 M) }  {" C; I+ u1 \& h; D! v- qif(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);
    , G; f# Z6 T7 L* ^  L' T1 b9 Otarget==nums[mid]时,不结束循环,继续进入% W9 |- r. t: D' |: _+ Q- e! f( K
    两个if可以同时进入,寻找界限( ?0 ?2 _0 L7 W; q
    设置限制,防止mid-1,mid+1越界
    ( c& ~1 v6 ]2 f# X3 r: Y1 v6 h, M代码
    # D! j8 G6 m! bclass Solution {
    - [1 d8 P  Y1 ^* u  W+ bpublic:
      z9 l9 K2 @3 X    int left=-1,right=-1;
    , }2 e- n6 j, Y: n. k# t* N    vector<int> searchRange(vector<int>& nums, int target) {$ W; V8 U6 i. C4 u
            if(nums.size()==0)  return vector<int>{-1,-1};
    3 u8 w8 T6 q4 }  Y7 ~: C7 r        binary_search(nums,target,0,nums.size());& S; d* C: ^- p
            return vector<int>{left,right};) E9 n0 Q* H- w1 |- y
        }
    2 N5 F) n9 H- W$ ^' Y    void binary_search(vector<int>& nums,int target,int l ,int r){# ]# P6 Z; ?! [3 X0 P6 r2 {
            int mid=(r-l)/2+l;$ W  I- @% L- E# ?$ o* q
            //printf("%d-%d\n",l,r);
    : {. R- I6 o( F& a2 w9 n! m; G        if(target==nums[mid]){
    2 X- O8 m) i& j! @0 e            if(left>mid||left<0)  left=mid;7 }6 ]9 E  ?4 J9 y' t- j
                if(right<mid||right<0)   right=mid;
    $ m/ M8 ^" ]% G: k' f- ~/ w6 ^        }
    3 k+ o) K/ }7 Y, `        if(l>=r) return;( q! o' F: ]/ M5 A  ?
            if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);
    0 [$ d7 Z. r- _# B        if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);3 b1 m+ r/ \9 Y- F
        }
    + u9 x0 {7 J0 K/ F) t5 Z; y};4 q. r# F8 M# s6 ~6 u  K

    ; S5 j  D" [2 I$ u————————————————
    $ r/ v, X& B; n; H- y$ J, T. F版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    9 Z& T' a6 p2 G8 g8 e0 [# Y4 j5 u/ x) _原文链接:https://blog.csdn.net/qq_41735944/article/details/1266488328 \) I2 \# B2 n3 L8 W- B3 |

    / C) ~4 d0 Z0 c1 X( r2 H  W* C5 m" s+ @8 Y5 s5 @  L* ^% |" O
    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-4-15 02:35 , Processed in 0.692085 second(s), 50 queries .

    回顶部