QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2639|回复: 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. 在排序数组中查找元素的第一个和最后一个位置
    : I4 d3 z7 t, i% x5 r  I难度中等
    / L1 l. @+ ?5 }给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
    2 r+ \: I0 Q/ q3 J6 s  R如果数组中不存在目标值 target,返回 [-1, -1]。
    ( T6 V3 @2 u) P你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
    9 y; @' r: l, L" `' g6 y; D. H* v( C. s" w9 e. y; t
    示例 1:
    1 m0 X1 ]" I5 r+ c% V) D; _$ I输入:nums = [5,7,7,8,8,10], target = 8
    1 }7 f3 {! b+ f+ {: k" H% h输出:[3,4]& t- I+ o. U5 P" [% f8 S" @
    示例 2:- k8 y# |( S3 T5 O, O" j, ~" Y9 ~
    输入:nums = [5,7,7,8,8,10], target = 6% R0 R) S4 t0 n0 @( q
    输出:[-1,-1]
    % N0 |4 F' e9 V+ H. t& F: r( R示例 3:
    , G8 I: O% _( W' S+ K; n输入:nums = [], target = 0
    # i0 y0 }+ n( e+ T! ]4 G" c输出:[-1,-1]) z) D9 i$ M4 e8 D8 e3 f
    1
    8 f8 b" d. L9 k3 A' F, K2. t6 g% m( v) ]1 _5 @
    3
    0 X- T3 r0 {+ c- o% @' }4
    " K+ ?2 _1 {" h; _+ H3 _5. A8 r+ Q' F* X$ R. V( w
    6& W8 _# k9 [$ W7 d4 ~
    77 D7 G: r- Z" y  H6 f: b) }
    8
    & u6 O) s& s; O8 r1 K9# E' X" g; D5 c8 a
    提示:8 T- w/ D  Q0 t  _2 l6 O/ j
    , V) K% M. s6 s; U; V
    0 <= nums.length <= 10(5)+ v" ~1 i! j7 k) I3 c
    -10(9) <= nums[i] <= 10(9)
    / N0 R6 J% ?/ u' Tnums 是一个非递减数组5 G5 M+ D% H* P8 `5 w
    -10(9) <= target <= 10(9)
    1 |1 T, \; m4 A5 A# @2 [1 r6 x思路* b. L- l2 N2 H" b
    关键步骤,与二分查找不同
    : y) U5 p# k" R; \% i0 e3 |if(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);0 I1 P- D, L# {9 M+ m
    target==nums[mid]时,不结束循环,继续进入
    & f' q8 i4 n! Z$ o5 H4 h+ }两个if可以同时进入,寻找界限2 t# d# j: Z5 R8 n2 B$ t
    设置限制,防止mid-1,mid+1越界
    0 {6 @! ?/ K+ X$ ]# x代码
    , {( N8 e7 u5 u0 m* |4 h+ aclass Solution {
    7 x! f, S$ z3 Ypublic:
    * J( p' \8 J. t7 U, _2 ]( I' X  \    int left=-1,right=-1;
    ! K, y. ?! j) v3 l    vector<int> searchRange(vector<int>& nums, int target) {
    ) K5 p0 e( J' t3 Z. x        if(nums.size()==0)  return vector<int>{-1,-1};
    9 ?; c" |: k" U* ?  G: |: u# E        binary_search(nums,target,0,nums.size());5 E4 n. v9 p- O
            return vector<int>{left,right};
    9 h7 Z& z% p' e    }
    ) E. F% I5 Y; W4 Y! J    void binary_search(vector<int>& nums,int target,int l ,int r){9 N" ?6 L- N/ @  h  z
            int mid=(r-l)/2+l;
    $ ]/ u, L  G2 u6 t3 u5 Q        //printf("%d-%d\n",l,r);0 Z2 D$ u: {- y$ K1 J& K
            if(target==nums[mid]){
    + ~; b8 A4 n2 x6 C            if(left>mid||left<0)  left=mid;
    + h% U9 r$ m" p5 a3 G* V( ]$ `2 E- s            if(right<mid||right<0)   right=mid;! _' A7 \4 H: R! {1 O* [. ~
            }; O' v4 S' u. J0 b) E$ Z
            if(l>=r) return;6 D3 U) w8 s( \# R
            if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);
    0 h0 M/ w9 d% w9 y4 R$ r+ f: K$ J        if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);* \  }7 }  i/ n5 f+ U* a9 t; `
        }; p$ W: l  l5 @: O
    };
    & G4 u4 v9 X, O0 [0 a$ P  V6 T- y: A( N& j' w* t, m
    ————————————————
    7 P. k! f; g- v' L版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。8 i1 l1 l. i/ N; S. X; j
    原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832& ]8 g) n$ ~/ b) s# I) p  q
    : D: Z  o4 ?$ p+ I! j& Z
    " Q3 Y" ^/ E/ ^4 a& 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-6-12 14:22 , Processed in 0.433239 second(s), 51 queries .

    回顶部