当前位置: 首页 > news >正文

[优选算法专题六.模拟 ——NO.40~41 外观数列、数青蛙]

题目链接

38. 外观数列

题目描述

题目解析:

核心逻辑说明:

  1. 初始条件:第 1 个报数序列固定为 "1"
  2. 迭代生成:从第 2 项到第 n 项,每次都以上一项为基础生成新序列
  3. 双指针技巧
    • left 标记当前数字的起始位置
    • right 向前移动找到连续相同数字的结束位置
    • 两者的差值(right-left)就是当前数字的出现次数
  4. 字符串拼接:将 "次数 + 数字" 的组合拼接到临时字符串,形成新的报数序列

时间复杂度:O(2^n)(指数级,随 n 增长快速增大)

空间复杂度:O(2^n)(指数级,主要用于存储中间序列)


题目链接

1419. 数青蛙

题目描述

问题背景

题目要求:每只青蛙只能按顺序发出 "c"→"r"→"o"→"a"→"k" 这 5 个字符,且可以重复鸣叫(完成一次 "croak" 后可再次从 "c" 开始)。给定一个字符串 croakOfFrogs,求最少需要多少只青蛙才能发出这个字符串中的所有叫声,若序列无效(如顺序错误或不完整)则返回 -1。

核心思路

  1. 鸣叫顺序约束:每只青蛙的叫声必须严格遵循 "c→r→o→a→k" 的顺序,不能跳步(如不能直接从 "c" 到 "o")。
  2. 青蛙复用:当一只青蛙完成一次完整的 "croak"(即发出 "k")后,可以再次从 "c" 开始新的鸣叫,因此需要考虑复用青蛙以减少总数。
  3. 状态跟踪:用一个数组记录每个字符当前的 “未完成状态” 数量,通过状态变化计算所需青蛙数量。

题目解析:

具体逻辑拆解

1. 数据结构设计
  • string t = "croak":定义标准鸣叫顺序。
  • vector<int> hash(5):长度为 5 的数组,分别记录当前处于 "c"、"r"、"o"、"a"、"k" 状态的青蛙数量(即发出了该字符但未继续发出下一个字符的青蛙数量)。
  • unordered_map<char, int> index:建立字符到索引的映射(如 'c'→0,'r'→1,...,'k'→4),方便快速查找字符在序列中的位置。
2. 遍历处理每个字符

对输入字符串中的每个字符 ch 进行处理,根据字符类型更新状态:

  • 如果是 'c'(序列的第一个字符):

    • 有两种可能:
      1. 若存在已完成鸣叫的青蛙(hash[4] > 0,即处于 "k" 状态的青蛙),可以复用这只青蛙(让它从 "c" 开始新的鸣叫),因此 hash[4]--(减少一个完成状态的青蛙)。
      2. 若没有可复用的青蛙,需要新增一只青蛙,因此 hash[0]++(增加一个处于 "c" 状态的青蛙)。
  • 如果是其他字符('r'/'o'/'a'/'k'):

    • 设当前字符在序列中的索引为 i(如 'r' 是 1),则它的前一个字符索引为 i-1(如 'r' 的前一个是 'c',索引 0)。
    • 必须有青蛙处于前一个状态(hash[i-1] > 0),否则说明顺序错误(如出现 'r' 但没有对应的 'c'),直接返回 -1。
    • 状态转移:将一个青蛙从前一个状态移动到当前状态,即 hash[i-1]-- 且 hash[i]++
3. 最终校验与结果
  • 遍历结束后,需检查是否所有青蛙都完成了鸣叫:
    • 若 hash[0]~hash[3] 中有非 0 值,说明存在未完成的鸣叫(如只有 "cro" 而没有 "ak"),序列无效,返回 -1。
    • 若所有前 4 个状态都为 0,则 hash[4](处于 "k" 状态的青蛙数量)就是最少需要的青蛙数量(因为每只青蛙最终都会停在 "k" 状态,可复用)。

时间和空间复杂度

  • 时间复杂度:O (L),其中 L 是输入字符串长度,只需遍历一次。
  • 空间复杂度:O (1),仅使用固定大小的数组和映射(与输入长度无关)。

http://www.dtcms.com/a/594764.html

相关文章:

  • 腾讯云服务器磁盘在线扩容系统盘
  • 网站制作详细流程sql数据库做的网站怎么发布
  • 关于网站开发的步骤音乐网站可做哪些内容
  • MySQL学习路线:4周从入门到实战
  • 站长检测同ip网站很多怎么办wordpress无法修改
  • 成都私人做网站信丰做网站
  • 正则表达式入门
  • 男和女做暖暖网站青海城乡住房建设厅网站
  • 服装设计师常用网站企业文化墙设计图效果图
  • 做爰全过程免费的教网站邢台做网站价位
  • 贵阳网站seo公司2022一级造价师停考
  • 递归函数练习题
  • [設計模式]設計模式原則
  • 【RK3568】TFTP+NFS启动文件系统
  • 网站建设 中标都江堰建设局网站
  • 网站开站备案外贸营销推广方案
  • 怎样注册网站中文域名免费个人网站 上传
  • 【Janet】控制流
  • 网站建设哪家公司最好免费医院网页模板
  • 【App开发】05:Android Studio项目配置文件全解析( App 项目结构)
  • 合并两个有序链表 --- 递归
  • 编译立创S3小智语音机器人+修改表情
  • 网站的文件夹结构承包工地的网站
  • Simulink从入门到入门--热水器1
  • 【开题答辩实录分享】以《云音乐小程序设计与开发》为例进行答辩实录分享
  • 三生团队网站找谁做的国人原创wordpress主题
  • 京东云网站建设做网站四百全包
  • 深圳做男装什么网站容易找工网站建设总体需求报告
  • Java-167 Neo4j CQL 实战:CREATE/MATCH 与关系建模速通 案例实测
  • 基于突发性链路感知的自适应链路质量估计算法matlab仿真