QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2662|回复: 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. 在排序数组中查找元素的第一个和最后一个位置2 w+ c# H. @( R. D- {' z
    难度中等
    8 B9 |4 U( U/ U, ?7 \' y给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
    - H/ x, x  m3 f* f1 y) X' p3 f如果数组中不存在目标值 target,返回 [-1, -1]。
    7 c, A/ H) E5 @, D# g  Z你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。; |- y6 e, k1 N. d( x2 |1 e' @
    ) s4 x/ C& G: T) l7 \" V
    示例 1:0 q- e, }8 |( @6 j- G2 t
    输入:nums = [5,7,7,8,8,10], target = 8
    8 S9 N+ w: i' b2 ~$ n5 I0 T输出:[3,4]' `* \; v% \: t% k
    示例 2:
    ( v) Y. |, {! X6 }输入:nums = [5,7,7,8,8,10], target = 6
      y  Q( i- T& D5 Z输出:[-1,-1], H" G8 y0 t3 e& ?0 p
    示例 3:; B, ^: v- Z+ |6 W
    输入:nums = [], target = 07 Z+ p, Q8 h/ V& z$ o( F9 K
    输出:[-1,-1]
    % J1 B5 P5 x4 B1
    0 X; B% }" x% E$ t+ k2, K0 F, K$ g; Q& b
    3+ R) X* G4 }" X$ `& L; E
    4
    : h  d9 v- ?/ o4 i! f5: y9 _$ a0 _" D5 `6 d0 e2 ~
    6
    # v3 o6 _, N3 c9 N7
    9 N0 }  |( s" ~  o; ?& j8: a/ O; k! M: h# B0 ^1 I
    9
    7 ?8 T3 F, K2 n: g3 D提示:/ f/ `- o& v; \, N. O3 j. b. b
    5 @) D; S, f  u2 `, \
    0 <= nums.length <= 10(5)
      \/ U# I% h# I" j; q6 Y-10(9) <= nums[i] <= 10(9)
    , U* E" M8 j$ J2 E# P, N" A, x4 Qnums 是一个非递减数组
    2 `6 F5 \4 x* c3 N0 Y-10(9) <= target <= 10(9)! E' s8 l( B) |2 V9 w
    思路0 Q$ H5 u' `" e. f& u7 V2 M& W
    关键步骤,与二分查找不同
    4 s8 Y' d! T( s; r# Pif(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);7 ^0 J9 Y3 C( ?* N7 N7 E
    target==nums[mid]时,不结束循环,继续进入
    " I2 E; M1 m4 \& j" q两个if可以同时进入,寻找界限
    , u6 y, x; h5 f8 R( M设置限制,防止mid-1,mid+1越界
    $ ?1 L) q- m7 w7 @代码
    ) ^, x# \9 g" Q9 Oclass Solution {
    " s8 |9 ?5 s+ G9 g5 Q3 S3 C% Jpublic:& u! O4 |' U; L4 a  [
        int left=-1,right=-1;# y- g4 T1 H7 b/ b+ v
        vector<int> searchRange(vector<int>& nums, int target) {7 x: C2 P8 M& E; C
            if(nums.size()==0)  return vector<int>{-1,-1};% V6 I& G+ D% g6 Y$ O3 K
            binary_search(nums,target,0,nums.size());
    : Q: B" Q/ w7 `. o$ U) h% s' h2 l5 z        return vector<int>{left,right};0 B) r& n2 ?0 K  W, R
        }0 u  o" N! {( H
        void binary_search(vector<int>& nums,int target,int l ,int r){, I7 S6 d( X/ p+ ?1 U
            int mid=(r-l)/2+l;3 I- b' `6 P% k4 u, q
            //printf("%d-%d\n",l,r);4 M& P% g  I1 E. h
            if(target==nums[mid]){8 ?9 t8 B: H1 s* x
                if(left>mid||left<0)  left=mid;
    8 y! h  D; b4 f; w& h1 v" m            if(right<mid||right<0)   right=mid;
    & ~% h+ \" F6 |; E        }
    9 V' v3 K  s9 o$ k; B        if(l>=r) return;
    " z/ v  [1 r! Y, X        if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);8 x9 v! w! F: z5 R$ a& |1 }7 F: M
            if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);/ j& q1 C. h. K. b& I
        }
    $ e) k- J* g; N2 W};! O4 e) U. @* D3 Q( I
    " n! h9 @" v/ \! [( H* O* w
    ————————————————5 g& }: v! Y, y) A+ U
    版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。: a6 q3 H" u% c+ J2 a% U
    原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832
    6 V5 i1 F( ?' X" }' D) p: o" W) {& f5 Q
    6 ?/ f+ m& G( V) B& m1 k
    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-30 08:39 , Processed in 0.505868 second(s), 51 queries .

    回顶部