QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2599|回复: 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. 在排序数组中查找元素的第一个和最后一个位置
    " W" J1 O# r% Q难度中等
    & h0 g2 w, e' s给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
    8 s) A8 |* y2 e) `* R3 B5 N9 G如果数组中不存在目标值 target,返回 [-1, -1]。1 v) A6 r# ]7 [& ?9 R* P- X. J) g2 e6 ~
    你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
    7 s  n, u7 M) u9 ~- _& z% Q- K! R& S/ `1 f
    示例 1:: @% @: F: H" ~8 w
    输入:nums = [5,7,7,8,8,10], target = 8
    & c, \! {2 Q2 V6 G; z% |6 F% y) P( o* ~输出:[3,4]5 ]' u! A" G  E; ]
    示例 2:
    ! m$ _% ?  U. P4 ?% V! O输入:nums = [5,7,7,8,8,10], target = 6
    ) ]; }0 x9 {3 x1 W" G, W+ W输出:[-1,-1]
    : k) t# x$ N* J9 ?) S- o- }5 L0 u$ P示例 3:
    : m! e3 w3 ]0 k) ?' p4 }输入:nums = [], target = 0
    + L9 C: S* q0 K8 i! b* }7 c输出:[-1,-1]& V4 v- o2 g/ W5 \% F
    1+ x- O9 J& |$ [4 P  _
    2
    + ~7 ~9 H! p$ k/ w* }3/ S6 Y2 e  c- s8 s
    4
    # s$ G* B$ K- L4 J1 p% Q5
    4 b2 D/ [- s, G6, U6 w% d* F: F2 w" \
    7- P# s/ ~2 n# ]* q) t- w- v. x
    8
    - y9 x! \! a1 S5 _4 g& x! Z: Y9
    ) J( ?. X( l8 g4 X, n提示:5 |' f& R# F. v+ M/ I8 k

    * `6 K0 N" r! G: E; \6 u4 l: l0 <= nums.length <= 10(5)( P7 l; @/ X1 s( O
    -10(9) <= nums[i] <= 10(9)
    ( C& ~1 c1 @! _nums 是一个非递减数组& [% U5 s2 X& X* H; v
    -10(9) <= target <= 10(9)
    3 j+ j  \9 B% w+ _' j' o; _; D思路
    0 e2 e2 M' H! ~2 R# W2 U关键步骤,与二分查找不同
    . n& w0 K* M% f1 \& nif(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);
    % X( j1 G/ m) n: {+ q; htarget==nums[mid]时,不结束循环,继续进入
    - p1 z& u4 n% I# O两个if可以同时进入,寻找界限
    ; ?9 \5 T7 Q% Q2 Z$ `设置限制,防止mid-1,mid+1越界
    3 G$ i# ^/ k2 r, m代码
    7 D* ]4 P0 k4 x9 V& eclass Solution {
    & W- b) \- f8 I( a% Fpublic:
    9 O1 E" t- s* u" l. c: C8 H8 r    int left=-1,right=-1;+ o7 ^& o+ ]* c  X5 q* v$ m
        vector<int> searchRange(vector<int>& nums, int target) {0 C# O) N% X' n8 O) u; I+ x6 Z
            if(nums.size()==0)  return vector<int>{-1,-1};
    " R* j+ A/ e4 d* O  ]# f2 f        binary_search(nums,target,0,nums.size());7 b' j" ]( B7 B0 [
            return vector<int>{left,right};
    2 _& r8 \7 i1 Z3 K4 x; s& x    }
    2 {) ~; z6 [; l. J    void binary_search(vector<int>& nums,int target,int l ,int r){
    ! `( ^: Y$ I* q+ J        int mid=(r-l)/2+l;+ \/ @& F, f5 q  t
            //printf("%d-%d\n",l,r);
    4 k" w! Q# Z, }5 D        if(target==nums[mid]){
    4 _( [! v$ `+ R7 _            if(left>mid||left<0)  left=mid;% C2 F& j, |) B) ~
                if(right<mid||right<0)   right=mid;3 r# l6 T. d) [" Y
            }. O  y# j2 M* G+ ^: z- H
            if(l>=r) return;, c7 K4 a6 _/ S; o
            if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);
    0 g% k. g  a5 f        if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);
    6 X' e% t0 ]& b& z3 [% U    }
    ( ?7 X4 W  d3 a# {; B5 a};
    " [- V9 Z' G$ N7 X) Y9 W
    % Y) V3 D1 w" g————————————————! A! U) C  q1 A1 j2 O5 G# V
    版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。% a% g) Z0 j: R+ J! ]! v( U
    原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832! O! @4 B) t' j7 o% g- k
    7 o- O+ o8 J& q$ R9 }

    0 K% ^! O; v% \  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-10 14:10 , Processed in 0.286803 second(s), 50 queries .

    回顶部