QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2600|回复: 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. 在排序数组中查找元素的第一个和最后一个位置
    ) U7 W! t/ F( V: t难度中等
    + L0 j4 h) ?* Y给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
    . L# M6 Q8 k7 U/ t- G$ C+ N如果数组中不存在目标值 target,返回 [-1, -1]。
    4 j+ ^0 D3 k) S2 s' C: y你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。8 m' D# O/ y7 Y, v" g$ E3 l

    0 d+ E& O3 h, a4 J" `9 \示例 1:
    : X5 r5 m6 N2 W- B8 ~6 c  j( y输入:nums = [5,7,7,8,8,10], target = 8
    ( p- v% ^# b9 K+ x1 C, E8 A输出:[3,4]
    & U4 g6 g7 b0 s& X, I4 h+ s; J) s8 h# `示例 2:
    " |  i6 S0 z* @' Y' h输入:nums = [5,7,7,8,8,10], target = 6
    / B1 G  a# i% J. u  V; A输出:[-1,-1]; B: B5 D5 y. g
    示例 3:
    , q; x- h% Q3 S. _% }, q+ x0 |输入:nums = [], target = 0
    $ S8 s8 l( [% g9 d( o& Q输出:[-1,-1]3 f% X* ~/ Y3 F8 D& h% G
    1
      s4 {# h1 Q3 ~7 u( w2  M6 R9 L. y& Q* h
    3
    ( ~2 z: Q% q% E% g" X4
    ( d! X6 X8 h! a* B5
    4 Z" ]: I2 W+ F( U8 v6
    & {: }# Q* [! V, G7
    ' G. E# y! o% T4 F7 k6 D8' H( f3 g  q4 Y3 {4 D
    9) O( E! r4 d. L2 L* X. I: W8 U
    提示:' K4 F# B$ j/ w

    7 _7 T5 b# [* H7 p4 G* y0 <= nums.length <= 10(5): u7 [" g1 {7 t( [0 k
    -10(9) <= nums[i] <= 10(9)
    % P- L) r5 D8 r. I; z1 r. [' tnums 是一个非递减数组4 P  z- z( c2 j& T9 V& q0 E, ?- l
    -10(9) <= target <= 10(9)- W4 I+ S9 x# G/ K5 x. P% P
    思路. L, h" q0 C; h1 S% C- t  O. v
    关键步骤,与二分查找不同
    # Y% z: U8 P: Q! q+ W6 }if(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);
    $ M( ]. f! K: s( ]$ ptarget==nums[mid]时,不结束循环,继续进入" {, v3 s% L( b7 I( {2 f. g
    两个if可以同时进入,寻找界限' H' l9 T% B5 X6 I
    设置限制,防止mid-1,mid+1越界
    , n  C; x0 ?( d/ k7 U5 B代码4 D- i" J6 m# S% s
    class Solution {" `/ F; D3 G0 n1 l$ m9 x; Y1 o4 W
    public:
    , G) _) c1 Z" q: u" E3 S0 Y    int left=-1,right=-1;
    / Y: d5 ~  F9 z! _. O    vector<int> searchRange(vector<int>& nums, int target) {$ C+ A) E$ H3 w! d6 L0 K2 a. s
            if(nums.size()==0)  return vector<int>{-1,-1};2 h- f/ N$ g* o. e' \
            binary_search(nums,target,0,nums.size());
    9 I: B/ l4 P" W7 V% b7 R        return vector<int>{left,right};
    ' _' Y* |# j! E+ d8 X7 C    }
    3 \- N+ c8 u6 J5 n- Y    void binary_search(vector<int>& nums,int target,int l ,int r){/ O' K/ k$ l$ z  ~6 `3 ^- X# [6 c
            int mid=(r-l)/2+l;
    4 m% a0 R/ `7 D8 I        //printf("%d-%d\n",l,r);
    6 t' D# u2 }0 s        if(target==nums[mid]){: v! o& C. |" v. b& P: h
                if(left>mid||left<0)  left=mid;5 N0 i% @7 G- y6 w+ |& s2 p4 I
                if(right<mid||right<0)   right=mid;
    3 x) ]( K3 h3 W5 h+ Q; g        }" ~4 D4 X( i$ Q9 h) t4 x- I/ v
            if(l>=r) return;
    - X) o) F% z! p, T; `7 A  B        if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);
    2 S) {3 }! W$ q) h4 k        if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);
    5 M3 f6 B9 w% S- n: N* }    }1 Y) q' Q  m) \. D) B
    };. b7 u/ |( e! o  k) V: B9 K: y

    6 h4 q( j/ B' [' ?4 c" G" y0 k3 c————————————————8 Z& p7 F5 x2 m, q5 U( Q$ k( Q1 R& ~
    版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。$ U$ C! X4 m& N- a
    原文链接:https://blog.csdn.net/qq_41735944/article/details/1266488321 r. s4 h4 E9 \/ ^. Z! W4 V
    6 c  u. f% w2 B1 X' ~/ |
    4 a5 H6 k8 D2 f/ I! A' L8 v
    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-4-10 15:54 , Processed in 0.396173 second(s), 50 queries .

    回顶部