QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2678|回复: 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+ Z* b7 v) c1 _8 |& C难度中等3 x, ?) V; }+ q' c
    给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。. G7 [! y/ X- a4 O( m
    如果数组中不存在目标值 target,返回 [-1, -1]。
    % R+ A+ _8 d) O& R: J4 i, g$ L你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。9 I4 W8 [- f4 |7 q+ h  o/ J  G

    5 e! U" s: ^6 V% O示例 1:
    # q( b( e0 K3 K9 X! J1 U/ Q输入:nums = [5,7,7,8,8,10], target = 81 _6 ]' ]3 c3 e# S/ F9 K6 G+ p4 Y
    输出:[3,4]6 U# ~1 l: N  u  {, ?% O4 |- U
    示例 2:6 y! y  o# I3 X; [% _3 D9 G
    输入:nums = [5,7,7,8,8,10], target = 61 {3 ~0 W/ K4 v( w% j8 G
    输出:[-1,-1]/ Z% [2 y+ ?5 E, J1 M% ]7 G" ^
    示例 3:  e3 K4 w* k+ I9 D1 R
    输入:nums = [], target = 03 Q8 i8 A6 p5 m4 N6 e3 ^
    输出:[-1,-1]2 n  i6 P% C  J7 }, e  P9 U
    1
    * L# _& h0 f0 G& t" }2
    $ k/ o0 t% j5 H) S: X  ~* K35 A6 b3 ~) q( ~. v& ~
    4
    1 g' [9 w( U2 y. {5  U& K3 ^, W! c- Z9 g# h
    6- C  o+ n# ]# |  I/ u) A# j2 [
    7
    # x. W9 p( u% Z( y' d8: G$ h# t0 a6 c9 t4 T9 D- F6 _/ R
    93 {. r1 t: U! }# {2 n
    提示:
    # S* S$ {7 S7 ?2 v; m$ H7 ?% m+ ?6 x* z) q1 G7 P( X5 y5 x7 ?
    0 <= nums.length <= 10(5)
    ! J* Y8 n1 _* k! g1 `-10(9) <= nums[i] <= 10(9)
    & X/ ~( A! d4 H* xnums 是一个非递减数组
    # J, L8 X4 J2 G% W-10(9) <= target <= 10(9)
    8 ^3 J8 t! a; D- R! I( K4 ?思路/ k/ z3 `* _( `. x0 F& [& v
    关键步骤,与二分查找不同
    2 L5 [7 T, V' Q5 `6 Zif(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);
    . v5 W, [  h' E  Ztarget==nums[mid]时,不结束循环,继续进入
    / e3 p  D% ~4 H- D0 n7 j# X9 g两个if可以同时进入,寻找界限0 |4 h' x. {& i" E1 p2 [
    设置限制,防止mid-1,mid+1越界
    2 |' l' C1 L! O/ M, f. r; m代码# R3 i( i2 ?! @& ^9 @, ?( v. _
    class Solution {5 J1 Y: Z1 R8 x4 T" D( t' |6 D# W
    public:
    6 K8 f( z) p1 O! t" t* n5 M+ E/ }    int left=-1,right=-1;
    ) I0 _7 E, y4 R9 U8 I; `    vector<int> searchRange(vector<int>& nums, int target) {& _3 b: @* \6 m5 n/ m
            if(nums.size()==0)  return vector<int>{-1,-1};3 n4 [$ {; e" c5 x: J
            binary_search(nums,target,0,nums.size());
    7 H8 {8 w9 ~' O" ?& |        return vector<int>{left,right};) U: @& l7 _- _9 J  B4 I, p
        }
    % b* y( O' _; M5 u: u1 y    void binary_search(vector<int>& nums,int target,int l ,int r){/ |, l- {9 r+ e$ _" z/ H
            int mid=(r-l)/2+l;
    & M7 E3 p8 A) E        //printf("%d-%d\n",l,r);
    . S) w1 S; A- S: {# O        if(target==nums[mid]){
    0 i( l2 C2 O: x            if(left>mid||left<0)  left=mid;5 D  h% r& n0 U6 h# Y$ W' m
                if(right<mid||right<0)   right=mid;
    ; F7 _" E& s2 ?1 z+ x9 w        }, V4 c' ?0 D+ S$ M
            if(l>=r) return;
    ( i: t! ~5 d+ X" n# K' ]        if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);  }* s/ u2 D2 T* Q4 m/ N
            if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);
    . d5 n4 X2 g9 U7 l! C2 f+ N' y    }
    . ?4 k! l+ R* [5 U- P};, [( ~; ~9 M1 W0 _$ d! ^& [

    1 m' H" Z* Y" ^7 \# L' u' J: g" S————————————————" i7 A- f8 c! R' f# E
    版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。0 ~$ Y4 P. V: h* `8 m: k% L
    原文链接:https://blog.csdn.net/qq_41735944/article/details/1266488329 Y; L3 R2 r- E' q+ Z/ w
    # v9 a% U2 ~0 e& M) h) y
    - ^: D' N- ?2 H4 l
    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-8-24 04:03 , Processed in 0.454621 second(s), 51 queries .

    回顶部