QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2693|回复: 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. 在排序数组中查找元素的第一个和最后一个位置
    0 J3 C1 x7 n) {3 B6 `5 E难度中等
    % z7 X) R: J' C% p3 p! i' @. _给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
    0 K4 Z' G; n' r如果数组中不存在目标值 target,返回 [-1, -1]。
    ' l% f6 c2 x+ d3 R! e- N+ e9 T. B你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。) l4 l. O; ?: L6 F
    ! o; B- ^  p, H( g/ o
    示例 1:* A1 R6 \$ _; B; z
    输入:nums = [5,7,7,8,8,10], target = 8) D9 Y5 L5 w  s# T6 c* F1 b4 U( Q
    输出:[3,4]# P4 T: g! \1 B4 B9 z% I5 p
    示例 2:: j& k! q# M4 m3 i1 _9 ]7 Q
    输入:nums = [5,7,7,8,8,10], target = 6/ G& K) }) Z, l; m$ g3 ^
    输出:[-1,-1]/ F7 ^$ u, Z- Q: H  W
    示例 3:  J/ G* C5 M2 |; v! j
    输入:nums = [], target = 0; ^! U, z. K7 u! a
    输出:[-1,-1]
    ! [' h6 q2 D  t' X' e# I- @  I1
    8 z8 W  H- L' @0 Z- }22 J" F" G( Y: N  {2 G6 T7 c
    3' s* ^7 g# g3 D6 g
    4
    " h! s) Z- Z  c5 @! a5
    , K  W* B# H8 B+ t; T7 T9 i6
    % v, v% J# s9 y$ C9 x  I76 G  N+ s' c: o' Y% j6 H# i! N
    8
    " l5 t% ?$ G& R; n- D3 f/ M9
    ( j$ x) _3 J* R提示:7 [! f0 N$ U* k  d. Q8 Q: ?# g

    $ Z- M5 j7 A' H8 ?, Y( ]0 <= nums.length <= 10(5)
    5 g! m8 L7 n' x9 g0 H% M-10(9) <= nums[i] <= 10(9)- h0 L& c* M( h$ O/ V% @4 ]4 m
    nums 是一个非递减数组
    ; T: H0 H8 e. m1 U5 F6 L( V( k5 {-10(9) <= target <= 10(9)
    + U  A; P! o; X- C" |; x9 i: q$ d思路
    1 Z- v; l# A/ o2 g0 s5 k关键步骤,与二分查找不同" M& X5 G0 z" e: @
    if(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);9 a% d# G: u' D7 U! Q5 T' ~  e
    target==nums[mid]时,不结束循环,继续进入2 k6 l: o7 {8 v/ ~& E% \- o
    两个if可以同时进入,寻找界限
    & p9 [, v0 j; z6 Q4 C- W5 P设置限制,防止mid-1,mid+1越界
    # M+ y$ |! u; b代码
    1 }5 A  A7 w/ e: R. v( g( bclass Solution {
    / n7 k: \' e4 ]3 ypublic:
    ' R5 g# N7 l4 ]: F9 e) D0 u5 J/ e    int left=-1,right=-1;2 ^& A$ p  F5 Z# k
        vector<int> searchRange(vector<int>& nums, int target) {
    7 Q( S, i" a5 \& M" C# z) \        if(nums.size()==0)  return vector<int>{-1,-1};- v5 {  ]9 e. N5 }8 W
            binary_search(nums,target,0,nums.size());2 V* f! \' j" [+ t) E
            return vector<int>{left,right};# L) @8 _2 M) h* f" W  m* @
        }/ U# O) Y8 N, @# a- s! _# Y
        void binary_search(vector<int>& nums,int target,int l ,int r){! Y8 L3 S7 V+ z) _( k
            int mid=(r-l)/2+l;. S7 t) ]% ]% a: h4 j. ]7 [
            //printf("%d-%d\n",l,r);6 a  l4 O- y0 R' n; }: j
            if(target==nums[mid]){$ x2 U* O6 V" g& Y/ K! O" n+ T
                if(left>mid||left<0)  left=mid;
    3 V/ b$ t, Z2 _5 i4 S1 [' L            if(right<mid||right<0)   right=mid;
    . Z) {& E# C- {: h9 @  H        }3 t6 y6 |: z' R. H6 \
            if(l>=r) return;/ w+ X% w9 \4 d2 Q$ O* C  }  M
            if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);$ e9 a, k- q/ e+ a9 k% g: L
            if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);
    2 ^8 |0 u/ n3 M$ k& O7 v    }% G6 c) m& K. O" p2 a
    };6 l+ A2 O9 |1 P7 R7 I8 [
    ( u( Y3 t) B$ I
    ————————————————- n5 \, Q" J8 _  Q, @1 r
    版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    . r( X5 k/ C  z9 y6 W原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832
    , a& G. \! W* S: D# m5 g0 j
    / Z* d/ l5 y6 y- o7 W" E% D
    5 I5 V5 B6 l; _( ?; v, n
    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-9-13 15:15 , Processed in 0.283886 second(s), 51 queries .

    回顶部