QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2663|回复: 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. 在排序数组中查找元素的第一个和最后一个位置3 g7 f4 `0 [8 g1 r* W0 _" c; I
    难度中等& U$ b3 R  Q. Z/ }8 @# I( b" t5 @
    给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
    & u- H5 c6 V6 I6 L; R如果数组中不存在目标值 target,返回 [-1, -1]。9 E/ {0 Z, J$ d. ]5 W
    你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。( p; G, R7 v, `2 x
    ; ^. }8 s% b  X; \1 W8 M
    示例 1:9 c+ N; u+ @; H: F+ \
    输入:nums = [5,7,7,8,8,10], target = 8
    , j& |2 T4 d& X- i! h; s输出:[3,4]$ H7 o6 @/ Z3 O3 E
    示例 2:
    # ?" i$ F0 g% S7 f- h% B0 H6 a* P! M输入:nums = [5,7,7,8,8,10], target = 6
    : r8 X2 b; D, w* Y输出:[-1,-1]
    6 b* ]6 ~* i( ]4 B2 y示例 3:3 ^. ?2 U/ y: s
    输入:nums = [], target = 08 A# G$ s* U0 q0 F/ {$ t: O
    输出:[-1,-1]
    * C. f# S  I& X1! v) |. E0 `1 w
    2/ Y6 W5 m* w, l8 {" Z3 o) F
    36 n' S/ g' Y" q8 V' {
    4
    ( O" O$ B- o" _5/ A- q& R$ |1 u! @  X% ?9 ]8 G' i
    6' t2 W  a, g/ }: d  h8 f
    7- w% v$ F; E* E! ^9 h. E1 R/ j2 e
    8) f5 W, C4 J! y# b( t! |3 A9 J
    9
    : n6 z8 p3 `1 o( A- [0 @提示:# T& ]! W# H; k
    9 U" u8 D  @: l5 E
    0 <= nums.length <= 10(5)1 F3 g; Z- f9 d% T
    -10(9) <= nums[i] <= 10(9)" r; o" L+ c& j5 @
    nums 是一个非递减数组- i8 F+ \/ E: Y2 D
    -10(9) <= target <= 10(9)
    ' n1 H% A1 Z8 S+ U) A  H思路3 Y2 l! O2 v+ ~5 N6 L  J/ S: F
    关键步骤,与二分查找不同
    + l; k0 F. \& x  nif(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);  B. N" B* x7 V9 x" L6 s
    target==nums[mid]时,不结束循环,继续进入
    . F; n( {8 W- [' u两个if可以同时进入,寻找界限: ]  J( Y1 J  ]$ G3 V. ~5 W: x9 x
    设置限制,防止mid-1,mid+1越界
    8 V  w3 b- Z% v* H代码
    1 v$ Z# G9 K% P) T- I# Wclass Solution {
    % v4 E9 q8 P& P$ o  _3 A+ P9 Bpublic:
    1 V8 \, I: {4 D: V" _0 U9 {7 E    int left=-1,right=-1;" r+ h* S. k* _2 B
        vector<int> searchRange(vector<int>& nums, int target) {' e/ M  C- U* ^; o6 o, X( l
            if(nums.size()==0)  return vector<int>{-1,-1};4 C9 Z/ N, u: i0 y' w# T
            binary_search(nums,target,0,nums.size());
    $ h% Z1 d) C+ c! f/ K5 T        return vector<int>{left,right};
    ' Q/ @8 e6 K6 D& i9 y2 b. q    }
    + q. c% u0 T% L+ x, Q% Q    void binary_search(vector<int>& nums,int target,int l ,int r){* s5 V3 ^6 W3 T0 J7 S1 r$ s
            int mid=(r-l)/2+l;2 G, k) w2 w" A7 O, P/ Y  c
            //printf("%d-%d\n",l,r);7 l' B$ ^2 K0 Y, ]8 N
            if(target==nums[mid]){/ z8 ]& k) Y' H/ @1 P, N
                if(left>mid||left<0)  left=mid;
    1 D5 d% m: T* G8 C            if(right<mid||right<0)   right=mid;! M0 U2 z8 s1 R' N# Y; ?
            }" C4 r. i, {8 V1 z' d. b
            if(l>=r) return;" i3 a8 e" ~% f
            if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);
    & `4 O" R& H4 g# w: y        if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);
    ; u% M) M( F" m6 |    }
    9 \. i0 a4 d# P+ t: W};
    ; m) Q* t8 ?- D6 X
    " v7 ]2 }, o" ]————————————————: i1 w; U4 ?; u$ A/ f2 F$ W; I: `
    版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    $ I" h' D3 }) R1 j; l* ~原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832
    0 j  _* Z+ @1 b  L; ^6 _1 S
    ( d' r. b& L$ c3 J
    % F% J) a5 c7 x' \1 Y5 J" A
    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 12:43 , Processed in 0.445836 second(s), 51 queries .

    回顶部