QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1652|回复: 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. 在排序数组中查找元素的第一个和最后一个位置3 s* _( u$ y! w5 A* `0 Y; [
    难度中等" o% K8 y/ m8 v: ~5 k5 h7 j
    给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。  Y5 S0 V* q+ D% {: \4 w! R$ I4 O
    如果数组中不存在目标值 target,返回 [-1, -1]。
      G1 K" L, Q/ b( L+ Q# K你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。. i, V' {3 I; [( [) @# |3 G
    # @# m/ ]( W1 T. ^$ s, D; z
    示例 1:, k" q& q) P9 w8 e3 ?' j
    输入:nums = [5,7,7,8,8,10], target = 8$ U: J# D0 D7 _; C4 P0 Z/ x' }
    输出:[3,4]& Y- L( E# Z* C
    示例 2:' ^* e7 R3 ~8 d1 c$ `
    输入:nums = [5,7,7,8,8,10], target = 66 N9 t% m' _+ V# _. `: m
    输出:[-1,-1]9 M5 }8 z& m* N8 U# s* B
    示例 3:
    6 n! q  S/ z7 Q) C7 a输入:nums = [], target = 0& |" Q9 ?5 H! o
    输出:[-1,-1]1 O  y" b: r/ a, s
    10 C) s7 e/ \9 a4 G0 I9 k) D5 g8 P- ^/ W
    2
    / y, }* |7 A2 `5 `' D. l0 C3
    , R; I$ c$ ^: ]5 l4
    & J. o! d' R; Q1 Y1 X/ U5
    ! s! f2 G  O- @& T9 V6
    ( ?, s; V% c6 d: b3 S7: N6 D& j5 e" [: W8 n" z
    8/ M1 D6 U2 j1 p1 J, s1 _- M
    9, W( }& T( g1 L( b
    提示:
    . b# r) v- |1 P+ i" r0 t
      _$ c- N7 d+ I0 <= nums.length <= 10(5)
    ) {2 {. t4 z8 p! D( p5 h9 S-10(9) <= nums[i] <= 10(9)
    ' w3 Z4 O3 T$ d, `8 bnums 是一个非递减数组
    0 e- {7 N9 t8 S  k# d! q7 ^-10(9) <= target <= 10(9)( J0 v! T2 c1 n0 b" b. r
    思路
    ; p7 u1 T3 E- M, X关键步骤,与二分查找不同
    . A0 `# @* o: u6 [+ M# xif(target**<=**nums[mid]&&mid-1>=0) binary_search(nums,target,l,mid-1);5 ~$ g- T: {+ f
    target==nums[mid]时,不结束循环,继续进入
    3 F3 F# u+ ^8 Q) U$ `7 b$ t两个if可以同时进入,寻找界限
    / R. {( D0 g; h% e7 U" w设置限制,防止mid-1,mid+1越界+ m( y! L7 N" |: b1 p* V3 [
    代码
    8 l4 c+ Q, w. d9 {class Solution {
    * L0 c% k. w( t/ |& P# Z- Cpublic:
    " t# x, u. ], B" y- {$ [! S3 e    int left=-1,right=-1;2 |# T# X+ }% d$ {- |
        vector<int> searchRange(vector<int>& nums, int target) {7 i- D9 x1 ]0 r' [
            if(nums.size()==0)  return vector<int>{-1,-1};2 V* M) I3 H6 I" j/ h. B
            binary_search(nums,target,0,nums.size());* `5 P/ i2 ?- A/ l' B, h, z; A- `
            return vector<int>{left,right};
    1 N  ^$ l1 W- @    }
    1 w$ g& o2 o7 S; G$ G    void binary_search(vector<int>& nums,int target,int l ,int r){
    9 i) X& z. @9 G0 F$ L5 W  g        int mid=(r-l)/2+l;
    8 }' J& ]! \* p' g7 G. L  a! K        //printf("%d-%d\n",l,r);
    + q6 b) C: L5 h' l        if(target==nums[mid]){
    3 @1 G) j" _! g4 E1 l            if(left>mid||left<0)  left=mid;
    & g: A' T% ]* }/ P            if(right<mid||right<0)   right=mid;
    2 u% e; J6 {$ p0 t( ^. z" J, S        }
    2 r  x7 p  o. Z4 c( n        if(l>=r) return;( N# S, a9 P/ W
            if(target<=nums[mid]&&mid-1>=0)  binary_search(nums,target,l,mid-1);
    2 M0 r* F4 d( V  m3 W        if(target>=nums[mid]&&mid+1<nums.size())   binary_search(nums,target,mid+1,r);* @" |$ n6 r# \5 X( A* |' r
        }' n% E- Z8 E5 l) O1 p: W: A
    };
    7 n9 E* }& b6 h; M5 w& @" }3 N. m# l& [. b% `
    ————————————————
      z# K% y2 L" M) N8 D版权声明:本文为CSDN博主「嗝~~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。7 e, ~6 p5 W5 `/ `: A
    原文链接:https://blog.csdn.net/qq_41735944/article/details/1266488324 L+ }; h6 e+ X8 \' v: h

    7 M$ [! d0 b3 O9 z$ e: U3 l1 {  {9 O+ a6 ]0 O6 \8 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, 2025-6-3 22:52 , Processed in 0.355680 second(s), 50 queries .

    回顶部