QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2603|回复: 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. 在排序数组中查找元素的第一个和最后一个位置
    + m3 }& m, i/ w# X难度中等( P  H' v: i% E; t2 ?6 K3 _3 I/ Z# E
    给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
    ' C3 A/ o4 P0 L# C5 U1 g9 x如果数组中不存在目标值 target,返回 [-1, -1]。3 G: w0 _7 p& t
    你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。7 I$ ^# |; J+ N- E

    5 h! C/ W6 q. Z3 @+ l示例 1:6 X, f& _! X; |; u
    输入:nums = [5,7,7,8,8,10], target = 8
    & F- z$ w* |; {# D$ f输出:[3,4]# ?! _2 s! Z) ?( N& I- p- x& h, [
    示例 2:
    ) w6 L' _; V% _& W" n0 N输入:nums = [5,7,7,8,8,10], target = 6
    ; j% y5 [+ E4 q" n; n/ Y! n输出:[-1,-1]
    8 ?1 }8 c: N, L示例 3:
    % ]8 }; |- W( u5 j* s) m) a输入:nums = [], target = 0
    / \' c, N, |" c0 i7 f0 \2 M, c/ A输出:[-1,-1]
    7 A, {6 F" [/ L, z: Z. z9 q- O" s7 l1- T9 n6 w6 ?! \6 C; {8 k- E8 {: J- i
    2
      O) {9 Q3 ^) N- c! D( \3- ?, U' f2 n9 `! N
    4
    8 w7 W/ |  r+ e" ]5
    ; `" b8 |1 k3 T5 G% ]69 h4 W% L- Z8 L+ `' [$ N( }  x
    7
    5 w8 Z  y! N! z2 c1 z$ C8/ A6 s6 Q; Z+ p& n* |2 ?
    9
    8 u! E8 B  h/ O& @! |) C' Y7 t提示:1 V! F6 I" ^8 E' ~5 C

    ( ~7 J  M" P  Z6 V0 <= nums.length <= 10(5)# [7 ^7 G/ k: K8 L& \
    -10(9) <= nums[i] <= 10(9)1 a- Q$ ]$ Z+ e/ I0 j
    nums 是一个非递减数组
    ' F1 R& E/ Q5 r) ^4 y-10(9) <= target <= 10(9)1 X$ h% J, n- L$ p7 l$ \1 g
    思路% R/ j& r5 R3 _2 m) {' q* o: \! s" z
    关键步骤,与二分查找不同
    8 k# D1 g, Y% Fif(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);
    : C, V" K3 ?% }' c+ \  y. utarget==nums[mid]时,不结束循环,继续进入
    - i4 P3 t, n9 L( h! f, ~% o两个if可以同时进入,寻找界限: ~9 `' L9 e# F" d  t" [
    设置限制,防止mid-1,mid+1越界
    " B1 @+ j2 h; ], Y8 M' {代码3 K9 W* U* _6 ]2 o
    class Solution {
    5 L/ m, Y* w$ Ipublic:
    2 q) Q$ z3 Q% g( _& l( s+ F! a$ _    int left=-1,right=-1;, R; A* s9 q% E' X
        vector<int> searchRange(vector<int>& nums, int target) {
    ' f5 g8 G/ H4 j0 V; R# ]0 Z, Z        if(nums.size()==0)  return vector<int>{-1,-1};, J8 Z  u1 ?$ U
            binary_search(nums,target,0,nums.size());2 x% J0 b7 z8 P
            return vector<int>{left,right};0 p/ n/ Z9 |1 [
        }
    # [) C+ [$ N5 c9 r1 D+ T    void binary_search(vector<int>& nums,int target,int l ,int r){& L4 u4 u1 a5 Q9 S( D2 N6 d; c
            int mid=(r-l)/2+l;- Z! x; r3 m% n0 ?6 f, z0 v( x) K* A
            //printf("%d-%d\n",l,r);
      }  O2 N' y7 G( E        if(target==nums[mid]){
    3 X+ l7 S) e/ p4 K            if(left>mid||left<0)  left=mid;
    - K  c8 ~) L! s3 \; X: u! J% O            if(right<mid||right<0)   right=mid;
    + q  o# f2 @, \* `8 T        }
    6 j4 q5 {9 ^- V' ^0 u9 p8 e        if(l>=r) return;
    + F1 z5 X- E+ d  f0 g        if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);* q7 u3 B, p4 l# w  U& h" {& \
            if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);6 ?9 O/ ~- w6 ]* @' H8 a
        }0 b4 A4 ~& F! A: B" ?# y- p4 n
    };0 U+ V; T& p# P. A/ G8 d9 [( J: h
    6 V* h/ T3 n' i
    ————————————————
    0 V1 L& }9 E0 v; e  C, c5 `版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。! o$ O3 z9 z% }7 _5 _! y% `) H
    原文链接:https://blog.csdn.net/qq_41735944/article/details/126648832
    / b. P9 c. m2 P' ]+ b# M1 ~4 X7 I7 _- J, G7 W5 E: O' m, r. Z
    1 w" n: t% M8 u1 v& |! ~& 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-4-13 09:57 , Processed in 0.373518 second(s), 51 queries .

    回顶部