QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2640|回复: 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. 在排序数组中查找元素的第一个和最后一个位置- o1 Y- C- W" `2 b' ~/ E8 H1 O
    难度中等5 F/ p. A6 x# ~4 s- @
    给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
    " o& t+ p- n2 W如果数组中不存在目标值 target,返回 [-1, -1]。6 |' R: y9 S" J$ Q3 c+ l" f
    你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
    7 @6 C: Z' H- h( J. d3 [" j
    + h) P0 F- S. N# d. L1 V1 F示例 1:
    . s7 @; V. ]& M/ Z输入:nums = [5,7,7,8,8,10], target = 8  V) H1 b* G" P6 _! j# l2 E, P
    输出:[3,4]2 @3 z+ c, L* H5 T) m0 X2 w+ h
    示例 2:
    3 \/ n1 Y' \: k9 D3 {输入:nums = [5,7,7,8,8,10], target = 6
    . f5 M2 M. T/ O4 e输出:[-1,-1]& o7 M/ V: l6 M: T7 H5 e
    示例 3:( k4 L, m7 O* s; o0 h( o+ f: ]
    输入:nums = [], target = 0
    . u" z! o0 ^* d( C* @( N* _输出:[-1,-1]
    : y& V. x6 I3 @" h5 {, B% x; i3 r6 |1
    1 ?! F' [* _# e0 p, f2/ s, X; O/ a/ L  l
    3
    ' h  Y) Y: G# ?! u46 R* l: v0 y: u
    5
    1 {: K6 v. h0 D6
    # a4 P2 w& ^# ?7
    $ ]8 C7 R4 \" \; g- T- H) w8
    & r/ L% M. ^+ ^+ t/ |% x91 a% e* Z. f& O3 Y9 n# a  I
    提示:2 u* Z: |7 Z6 E/ i+ M

    2 ~; }6 w: q* _. `7 y( c) v) o) k. R0 <= nums.length <= 10(5)$ W! q& N9 o! f3 Z
    -10(9) <= nums[i] <= 10(9)
    # y. h' K$ X( O" Cnums 是一个非递减数组0 `, b. }1 ]2 U! s1 ~! P4 N
    -10(9) <= target <= 10(9)
    ' F+ m& X9 ?/ d3 E% X8 ?0 K思路/ j$ m! [  U0 D6 _
    关键步骤,与二分查找不同. I$ x! m' \8 c
    if(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);
    ' [1 e" S8 ?6 _# \/ z4 atarget==nums[mid]时,不结束循环,继续进入
    / Z1 p+ K& o9 z# W" s* n! U% c- e两个if可以同时进入,寻找界限
    / m8 r+ `9 K0 c, x设置限制,防止mid-1,mid+1越界
    ! l6 E1 ]+ t' O/ e代码- c: \9 ]" {1 V0 T7 H
    class Solution {. t  F$ F+ }4 @, ~7 f" }( k7 g
    public:: o, B4 U+ C2 ]" {
        int left=-1,right=-1;( ]& s# s7 Y3 P5 n. z
        vector<int> searchRange(vector<int>& nums, int target) {9 i& |) a; m; a
            if(nums.size()==0)  return vector<int>{-1,-1};/ }8 O$ t; V. R( O
            binary_search(nums,target,0,nums.size());+ ~* N  h( G$ x3 ~) F. T& E% i6 I5 X
            return vector<int>{left,right};! f" g: N) R" n6 @- X) v; ^. G# E0 b0 }
        }* w% a3 q; ^2 ?4 ]& X  U, A/ f
        void binary_search(vector<int>& nums,int target,int l ,int r){
      R  j7 ^/ R- w* F& D        int mid=(r-l)/2+l;! B' d+ R, i7 Q) V9 _
            //printf("%d-%d\n",l,r);
    1 j% u# h+ q: v6 C- G        if(target==nums[mid]){1 O1 K- G: B0 j0 O" B0 h0 n, b
                if(left>mid||left<0)  left=mid;) V9 k0 J3 d- l  j" C8 B
                if(right<mid||right<0)   right=mid;% L/ q7 j9 A% E
            }
    ) m# [0 J9 ~4 R) ]# q% A        if(l>=r) return;, z! }" i' r) d7 Y
            if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);
    4 h% V- P4 {/ d. U- v6 A        if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);
    ) e0 K0 ~8 @  J( B: Z/ C& M    }* ~" }3 O8 z7 D, P' @
    };, b$ [- b* F% [# t8 b
    2 Z: Q( M8 R% r8 Q
    ————————————————
    + {2 s2 u0 a2 u* V# I  ~( G; b& U) Y版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。% ^7 Y( k" u7 R3 p1 a' @/ r/ q
    原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832( c1 u1 r1 F+ t+ a

    % C9 n# t3 S1 k
    ! T3 n6 I  T$ g% m; d
    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-14 12:36 , Processed in 0.596208 second(s), 51 queries .

    回顶部