QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2724|回复: 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. 在排序数组中查找元素的第一个和最后一个位置
    ; x* ~; T  _: ^4 d" P) h7 A2 N难度中等$ y9 v3 d7 U5 J9 S
    给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。5 |  F8 p' b- O( v7 C5 w# x
    如果数组中不存在目标值 target,返回 [-1, -1]。' G0 @! ^( Z9 S& x# _3 W. |* K1 F3 G
    你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
    $ b  B1 e2 ~# S& F6 |0 v9 w' m  W0 y! [/ Z& F: B; k
    示例 1:
    ( f- N6 A% D! v* M& q2 b输入:nums = [5,7,7,8,8,10], target = 8
    # [; @7 F# j! o7 h& u* ^输出:[3,4]; E4 v( e' L+ w5 ^) A) J
    示例 2:( u: v7 c1 ]& K* R
    输入:nums = [5,7,7,8,8,10], target = 6, ]8 ?$ d/ B6 v# p3 C. x
    输出:[-1,-1], C  k: o  k  a. F( J
    示例 3:
    $ S4 N' E2 _$ Q) S8 Z输入:nums = [], target = 0; `7 @, Q6 |/ ?; K, O1 l: u
    输出:[-1,-1]) C( Q5 D2 ^. y% L$ O: |
    1  ~; i( o9 {$ |
    21 `2 Q; c. g, O. |! x9 S  f
    3' r9 V/ F: I+ z; a6 ], e
    47 b  m% v9 Z% b
    5
    * @- q$ U7 @) g! {0 c/ `6$ Z# i9 O& I9 F5 p7 N
    7* M& ^! P& @' C  }6 ^' y( ?
    8
    $ A+ l' G; O* E  y9 C9. d! k5 c( y$ r+ B8 y
    提示:
    4 A  {4 U' o- N8 B% x8 z4 Q5 z# _1 t' k& |/ A
    0 <= nums.length <= 10(5)
    ! _! P) G8 d+ L. K& T-10(9) <= nums[i] <= 10(9)2 [6 Z* c( i, w/ z, g6 W
    nums 是一个非递减数组
    # W0 ^5 r/ c3 T  p1 E-10(9) <= target <= 10(9)
    ( r8 n4 |0 l9 p0 O3 G思路
    - N, n& J+ F5 |3 M关键步骤,与二分查找不同6 j! \' g. a) a& \5 H
    if(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);, F; u& A  O/ f  Y! R& Q8 h# I. ?
    target==nums[mid]时,不结束循环,继续进入
    6 s1 b0 f* f# O* `9 V2 B两个if可以同时进入,寻找界限  E) @9 |! L' }5 d- y
    设置限制,防止mid-1,mid+1越界+ Z0 J* @" H# D5 q2 t+ M
    代码" S! l; I, h# @& ^+ _; v! R4 }
    class Solution {5 m5 B& I# c4 B* |8 g" e- X
    public:& G! H1 O' W# Y4 j. x' `
        int left=-1,right=-1;
    8 h1 I9 p* k3 Y- L. ~; n    vector<int> searchRange(vector<int>& nums, int target) {% }  B* U) i4 Z: T6 j/ a3 B
            if(nums.size()==0)  return vector<int>{-1,-1};9 z# W+ A* E$ v/ S
            binary_search(nums,target,0,nums.size());. N; W9 D- a8 b) V7 O# c
            return vector<int>{left,right};
    4 |8 O! e" z! u5 l4 ^9 R    }
    0 J: h+ v3 ^% a/ s9 q    void binary_search(vector<int>& nums,int target,int l ,int r){, Z9 o! P3 P1 F" J
            int mid=(r-l)/2+l;; g1 \& K7 A  {! H, w$ J
            //printf("%d-%d\n",l,r);
    * h7 X& z$ O! m2 _* \/ c        if(target==nums[mid]){
    - }0 U1 ~0 e3 _7 q0 _2 s* q7 n- `; W            if(left>mid||left<0)  left=mid;; ~9 G/ c7 |! C: d+ s0 @' q3 d# f
                if(right<mid||right<0)   right=mid;
    " e# p8 A: x2 p% u0 O/ \- j        }
    8 n; Z: J! z  b7 I" V0 \        if(l>=r) return;0 ^0 N+ e$ t* G! c. d1 M
            if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);" M2 S3 h  G" ]
            if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);
    & p" c- [/ H: v" |+ m- `    }9 e* m3 c. C6 x% a4 V
    };
    + p  a* s9 _' o' [$ I
    / o: k; Y* k  P9 W' \. _0 P) V————————————————
    ( _: [) r! _  h版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    - F# s: D; l, @+ r$ X. J原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832& |+ W; o. O1 B, C, f3 i
    2 b7 N% f( M# m

    5 p. N8 |) P8 O' h3 }4 }0 i! J$ x+ e
    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-10-8 10:32 , Processed in 0.317422 second(s), 51 queries .

    回顶部