QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2661|回复: 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. 在排序数组中查找元素的第一个和最后一个位置$ K8 a2 z  E% D7 ?* W. Y7 p! x
    难度中等, g" _; l! c9 ?9 B
    给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
    4 r4 a1 I6 z1 v8 A* s3 K如果数组中不存在目标值 target,返回 [-1, -1]。" e/ i$ e( Q8 b9 t% r- Q
    你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。! Z6 ?4 }. K7 t  l+ Z  t: j
    $ ^/ B5 O3 H, U5 V  D8 C) D
    示例 1:+ a: H, y6 U: I* l0 B( F
    输入:nums = [5,7,7,8,8,10], target = 87 K, }9 {% u# K1 v9 v7 n
    输出:[3,4]) {9 H2 n9 G+ v* l
    示例 2:
    2 u; L+ E% n  b9 H2 Y3 `/ A( d输入:nums = [5,7,7,8,8,10], target = 67 @* Y8 ~; f# S( A4 j
    输出:[-1,-1]) Y! ]# a/ j' M
    示例 3:
    & i  k. h% L4 g2 j0 K$ X( x4 V- ^输入:nums = [], target = 0
    + d) o+ {, y# f3 H* O, f输出:[-1,-1]+ \6 ^3 a0 c5 [( S4 b
    1' p# g2 K2 V0 Y4 n
    2
    1 C" u. w0 A$ k/ H- M& U: I3
    7 a% s& |+ s7 J3 X/ a4
    * ^- y9 |( y7 x, }53 R$ Z/ L& e8 \$ N9 v4 F- _, a: p
    64 h( w* p4 z# \2 r8 e
    7
      U& ^- U  E  ]- U4 b/ x7 ^7 N: h8& p2 K# M9 F8 l. U* H9 H
    9
    " M: x6 `* C) r6 L% p& z8 c提示:  M. p2 l2 t) Z3 u. _

    4 \. x0 ~/ M1 J5 m4 X0 <= nums.length <= 10(5)
    & V* ?& e3 s1 G& T0 k4 ~# {-10(9) <= nums[i] <= 10(9), m4 d$ D9 L, @4 P' O3 p. I
    nums 是一个非递减数组6 Z) n) |' F/ E
    -10(9) <= target <= 10(9)
    - x) T7 u1 H* I1 f0 T0 X+ ?* B思路
    ( B$ t2 F( ]5 F  V: f关键步骤,与二分查找不同8 S4 X" Q" t# d9 d& n: n
    if(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);
    8 U" w$ `& Z  z" C+ |target==nums[mid]时,不结束循环,继续进入
    7 f1 `* [! G: V8 X/ G两个if可以同时进入,寻找界限1 g+ M+ W! i! T6 k. _; C/ i, M
    设置限制,防止mid-1,mid+1越界
    3 b+ \# K4 Y, `代码
    : ]/ n4 o/ p5 b+ Xclass Solution {5 Y9 o4 F/ H7 v5 t7 ]$ d3 w$ k: I6 o
    public:$ u* H1 Q8 n: \. r' a# |
        int left=-1,right=-1;4 J" N7 `" \* L' u) N0 _
        vector<int> searchRange(vector<int>& nums, int target) {
      J/ v& z; W- q+ b, b        if(nums.size()==0)  return vector<int>{-1,-1};1 W( D5 o" ]/ U
            binary_search(nums,target,0,nums.size());
    8 Q& f3 M7 ~6 l2 C1 J        return vector<int>{left,right};
    . F; b/ s7 T' E1 g, _/ u    }
    + b, I$ {8 j1 H/ ^1 ?' g+ B    void binary_search(vector<int>& nums,int target,int l ,int r){
    ; H3 |  v+ i, S( b% G! y. ?! {, M3 d        int mid=(r-l)/2+l;
    4 C" e' h& P  W& l3 `        //printf("%d-%d\n",l,r);9 E# P# D; {3 n6 r
            if(target==nums[mid]){
    - w1 ]! R& U6 c9 u* h: Z            if(left>mid||left<0)  left=mid;
    7 h$ G- a( |+ i! k! F3 Q8 J  J            if(right<mid||right<0)   right=mid;8 [, \) z2 I! o
            }! v, ^$ s# H; e. d9 g  K
            if(l>=r) return;/ ~0 R4 _; x" C+ L- Q9 I
            if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);
    ( A1 ~. S3 \, s5 ~8 ?0 {- ?        if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);1 b& C2 }& d1 f( ]7 T& a
        }4 u' \1 f+ a, z* h
    };* _% p5 w, x8 N

    ' l& f- n0 G/ c: J————————————————, C2 P  ^$ @8 O2 L0 `1 T( Z8 X
    版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。7 m& r. B3 N+ s8 I0 s; u3 r0 v
    原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832
    ) U, {1 N7 ~. l: j' M6 H
    . G9 v7 K6 i1 X5 M( b. \  H0 j8 B- s! j
    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-29 19:33 , Processed in 0.580982 second(s), 51 queries .

    回顶部