QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1721|回复: 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. 在排序数组中查找元素的第一个和最后一个位置5 e( ]) E: M% a) D) q
    难度中等
    + A5 n8 b% ^% P# G' R9 ~  ~8 }给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。' E* o3 J; F7 K) @* k/ {, q
    如果数组中不存在目标值 target,返回 [-1, -1]。
    * r- \5 }* l9 M  P你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
    + s, y  z) K2 m3 _% k
    # p7 t. K5 Q  B3 |% t, a示例 1:
    0 x& U# o* [; b9 u# [输入:nums = [5,7,7,8,8,10], target = 8% n8 `- n* F- \+ q
    输出:[3,4]' c" w$ j! B1 p" s( @
    示例 2:5 Q. K5 ?* M. T  Z
    输入:nums = [5,7,7,8,8,10], target = 6
    5 _: w  L+ p! ?0 t* Y) e输出:[-1,-1], b! y! r% X9 [$ |5 X/ t
    示例 3:
    8 |: b; ]$ Q  I输入:nums = [], target = 02 `3 R: {- Q. Y, ^1 A# m1 B
    输出:[-1,-1]
      ~  A/ E% w/ b) N7 V0 r$ H# G1
    2 A: _0 Q: b+ @# g9 Z  a0 `' q2& K. Y* z. o/ G( Z
    3
    & x1 P* U% s, r5 ~% V9 h' v) W4" n# G% j, j+ G0 Z5 P: n
    5- v% s' |8 t) f; }1 U
    6& A6 U2 T, f/ S: A% p
    7/ _7 q0 D; p3 O6 B
    8: O; r2 N- k% S0 S9 W3 n9 o
    9, J5 k! k2 ]4 _+ C6 F6 |  k
    提示:% T% E' }( {! u4 c) }0 ^
    & a6 C  n! z8 F- X  |3 h' P
    0 <= nums.length <= 10(5)
    * c/ X, j6 ~& q& }0 E7 W-10(9) <= nums[i] <= 10(9)
    $ Z, }& O7 G2 Z' b+ ^2 u" s5 P& `nums 是一个非递减数组8 R1 [) v! G! X7 C5 D
    -10(9) <= target <= 10(9)3 y% \' j& w6 v8 P( h
    思路
    . I7 o0 [  `: Q5 g关键步骤,与二分查找不同
      i% [9 Y  M6 |3 [" a7 ]if(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);2 ]4 H- Z& ], ~# R
    target==nums[mid]时,不结束循环,继续进入; M2 V0 J6 h# S, [" s- l1 B
    两个if可以同时进入,寻找界限& Z7 Z- \9 [( z2 ^/ u3 f
    设置限制,防止mid-1,mid+1越界
    4 f3 l0 I) D5 V1 ]- T代码
    1 d7 h. J& |" T; G7 cclass Solution {
    & D. R2 ^3 G' q* m, spublic:/ m+ ?2 @; R1 [# O" a
        int left=-1,right=-1;
    5 H! R  F/ I& }7 B    vector<int> searchRange(vector<int>& nums, int target) {
    0 v8 [; U9 E8 A        if(nums.size()==0)  return vector<int>{-1,-1};$ R! c% ]* N8 G. G. W
            binary_search(nums,target,0,nums.size());- b1 X& M3 ^& D  d  @
            return vector<int>{left,right};5 O9 m; w. v7 N; q( `& ]. o
        }
    " t! E/ {: i0 p' X  e) S5 Q  a    void binary_search(vector<int>& nums,int target,int l ,int r){4 h! O% F+ E% E: N$ |
            int mid=(r-l)/2+l;
    ) u. _7 @& n  q9 ]- I3 h+ [- o        //printf("%d-%d\n",l,r);
    " ]. @. L) P/ N! V; k$ F        if(target==nums[mid]){1 V( m8 U2 O5 e/ D: p
                if(left>mid||left<0)  left=mid;
    6 `7 U5 a) S# M7 O& r0 I            if(right<mid||right<0)   right=mid;( \) M: F: ]4 n2 W1 @" \' u( o1 b
            }
    0 E% f! J9 K/ y5 a/ }- M$ y        if(l>=r) return;" H5 M2 {/ U, L8 D
            if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);6 U' c8 E8 K: \% y  P
            if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);8 C' T, N. R- X9 S* X: u( s
        }( q& S' s  I0 w6 m6 p2 Z
    };  x2 |8 D+ y  f# Y4 J( ]

    6 `5 w$ P1 h4 i# p. O1 g. y# d1 a————————————————; E9 g, E& r7 ^/ J8 l
    版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ( b. Q; f+ p' D! A原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832# K7 E" C7 F# n4 E# y
    ) I1 z' V* c0 s' ?

    0 s8 t5 r4 \$ d1 h2 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, 2025-6-17 04:59 , Processed in 0.357263 second(s), 51 queries .

    回顶部