QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2728|回复: 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. 在排序数组中查找元素的第一个和最后一个位置" B  g# U  [7 o0 g6 g
    难度中等: R  c& n% O3 H, m% F
    给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
    , ~! g- x/ o- O' K' `, c- e如果数组中不存在目标值 target,返回 [-1, -1]。
    ; }( x% u7 r9 i# a你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。" ^# f0 J! \5 A; Y

    $ B6 k- j! T/ i- n' Z% f; z示例 1:
    - f7 K8 j8 k& a$ o2 e! F; L5 B& e输入:nums = [5,7,7,8,8,10], target = 84 Z7 Z8 w- K6 G
    输出:[3,4]
    % L; x3 u& H) ^2 w! t1 j8 X( K示例 2:
    ( z2 w7 A4 D7 N+ h# ^* j输入:nums = [5,7,7,8,8,10], target = 6
    5 A1 k: E9 o8 b: I# ^) V输出:[-1,-1]
    2 e$ T+ e( w9 Q示例 3:: u1 V, E/ |& w( s/ K
    输入:nums = [], target = 0
    : x: V% |5 }3 |% G输出:[-1,-1]% g/ e7 F6 P# k& M
    1" N4 w8 U. t3 R: M& L5 h2 w7 v) w
    2
    4 F! c3 N) H0 v  U$ A6 U5 }3
    2 @' K1 U& i* j1 h- T! ~4
    $ {* [" }* @3 U5 [3 J7 Z! q5
    . i. S: K4 n2 y5 s! y$ N6
    / }2 S0 r, e. W- ?6 U% i# m* y7. f1 W/ o, m' [! x' Y2 @
    8
    0 x6 t/ s+ w: f) X' F9/ x) t2 E3 g) J( m; @# |& b' E
    提示:* r/ a$ J: n5 a+ j

    ) @  ]3 h' I& S" `$ T( {2 u# M0 <= nums.length <= 10(5)
    0 ?2 W! U9 f* p4 ^-10(9) <= nums[i] <= 10(9)
    % N% U( L6 {# bnums 是一个非递减数组
    * w3 b% U7 o9 m9 ]7 ~+ v-10(9) <= target <= 10(9)
    ! e3 ^+ C+ j" L8 w2 A思路( {: j$ K- m9 u3 h5 `' |6 l; _% s  {
    关键步骤,与二分查找不同
    / H. s: V7 W4 A) |* a: ~if(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);
    ' h$ i! X( j- S: C$ c$ e9 utarget==nums[mid]时,不结束循环,继续进入6 k8 a# ^+ A/ N
    两个if可以同时进入,寻找界限# c$ Y: j0 m! u) |4 v5 f& P5 r5 ?
    设置限制,防止mid-1,mid+1越界
      @# r2 V, h  `4 Y$ L3 s代码6 [  i7 w7 X$ }! M' Q* q9 h
    class Solution {' s8 }3 O( [( ], i
    public:
    1 `1 q) a* m1 N$ ?2 b    int left=-1,right=-1;
    . k! u; a; J$ {! ~  T/ U    vector<int> searchRange(vector<int>& nums, int target) {
    0 Y; |) ^& V% s8 C9 y- z: R  ^3 m        if(nums.size()==0)  return vector<int>{-1,-1};, ?* D$ Y/ b# Z: g, Z8 v% Z+ V" F
            binary_search(nums,target,0,nums.size());3 d2 I$ I& b0 w0 S, v, f
            return vector<int>{left,right};' L! S3 j7 c- M6 q
        }: i5 h: t- Q* J. ^& ?
        void binary_search(vector<int>& nums,int target,int l ,int r){
      F) \, u7 {3 v" g1 @3 I  \        int mid=(r-l)/2+l;
    9 o( R$ {& h% j) l  n6 ~% ^5 s- n        //printf("%d-%d\n",l,r);
    " q2 p' H6 O9 o/ n        if(target==nums[mid]){8 E  b8 W2 L+ N7 ?; e1 T; u" ~. d) O
                if(left>mid||left<0)  left=mid;
    + }9 ~6 H3 X  G& A# p            if(right<mid||right<0)   right=mid;% c+ v2 o* k: W8 A9 E. K
            }3 F9 M" d  ?2 ^4 p& W+ q' ^
            if(l>=r) return;: V% I! F! O% r( L' P
            if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);; n+ U& p- C, y: |
            if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);9 b. R6 ~4 D. T4 ?- O; B
        }
    , r) G* N. ^4 z7 Y};: \: [1 E: P, S7 q& \4 |! r

    ; g  ]/ v; I. M————————————————. Q/ z! c. X9 i5 ?
    版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。, A  }$ n- ~0 q8 e  d& J/ S
    原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832  p6 Q8 F+ I, b

    9 K' r- x( Q) J) L' o, U2 T: {6 c
    ( N* _, d- p( D& @
    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-10-10 07:17 , Processed in 1.263285 second(s), 50 queries .

    回顶部