蓝桥杯---数青蛙(leetcode第1419题)

文章目录

  • 1.题目重述
  • 2.例子分析
  • 3.思路分析
  • 4.思路总结
  • 5.代码解释

1.题目重述

这个题目算是模拟这个专题里面的一类比较难的题目了,他主要是使用crock这个单词作为一个整体,让我们确定:给你一个字符串,至少需要多少个青蛙进行完成鸣叫的过程,这个地方强调的是最少的青蛙的数量,为什么强调最少,通过下面对于例子的分析,你就会理解里面的原因;

2.例子分析

示例一算是一个比较完整的例子:croak算是一个完整的过程,这个时候这个青蛙叫完之后,可以继续去叫下一个croak,因此这个输入的字符串最少需要一个青蛙,这个青蛙叫两遍就可以了;

为什么会强调是最少的数量,这个例子就可以体现,因为我们可以让一个青蛙叫前面的croak,让第二个青蛙叫第二组croak,这个时候可以是两个青蛙,但是因为题目要求是最少的青蛙的数量,因此使用一个就可以了;

示例二强调的是交叉进行这个情况,就是对于一个青蛙而言,他叫的这个顺序必须是croak,因此这个示例里面标注了第一个青蛙叫的内容和第二个青蛙叫的内容,都是croak,这个时候和上面不同的地方就是这个croak不是连续的了;

这个示例里面至少就是两个青蛙,一个就不可以了,假设第一个青蛙叫:c,r,到达第三个字符c的时候,他就不可以叫了,因为上面说了,这个叫的顺序必须是croak,这个时候他本来交了cr,再出来一个c不可能再是他叫的,这个时候需要第二个青蛙;

示例三就是无法完成的一个情况,因为这个第一个青蛙叫完croak,他再去叫cro,这个时候发现下一个是o,显然不符合这个croak的顺序,因此这个就无法完成,所以返回异常值-1;

3.思路分析

下面,我是用可视化的方式展示一下这个题目的思路分析过程:

这个题目的整体的思路是使用的数组模拟哈希表,值记录的是这个字符出现的次数:刚开始的时候,指向c,因此这个数组里面的c对应的值就是1;

下面的这一步很重要,就是下一个字符是r,这个时候我们就去找c,因为一个青蛙想要叫r,前提是他必须叫c,这个时候我们上一步前面就是c,所以我们可以看下面的这个图:就是1挪到了r的这个位置;

上面的这个理解下,下面就好搞了,我们发现,走到一个非开头元素的时候,我们就要看这个数组里面是不是存在他前面的这个位置的元素:

下一个元素是c,是croak里面的开头元素,这个时候他的前面没有元素,因为他自己就是第一个,所以这个时候需要另外的一个青蛙,我们在这个对应位置填上1;

下面的元素是o。我们找croak里面o前面的元素是r,在这个数组里面是存在的,挪动一下即可;

下面的这个元素是a,在croak里面,a前面的元素是o,正好存在,所以就是挪一下即可;

接下来的元素是k,我们找的是o,存在,进行挪动,发现这个到达k了,也就是鸣叫的最后一个字符,这个时候他的一次就完成了,如果后续需要,它可以继续重复,因为他的这一次完整的过程结束了;

接下来就是r元素,我们找的是c元素,存在进行挪动,以此类推(下面的这个过程我省略了,因为接下来的元素分别是roak,都是连着顺序的,这个原理是一样的,所以我就直接划到了k,这个时候相当于两个青蛙完成了鸣叫,我们发现剩下的正好是croak一个完整的鸣叫,这个时候我们从两个两个完成鸣叫的青蛙里面任意进行选择一个完成下面的过程即可,因此这个最少数量就是2个;

4.思路总结

下面的这个就是基于上面的过程总结:

我们分为是不是第一个元素,如果是c,我们就要看看是不是有已经叫完了的青蛙,否则就需要一个新的;如果有的话,k对应的位置–,我们的c对应的位置++就可以了;

如果不是第一个元素(roak之类的),我们找前驱元素,例如,指向k的时候,我们看看是不是有青蛙叫到了a,如果有,按照上面的过程挪动就可以了(该位置++,前面的位置–,这个就是挪动涉及到的变化),如果没有就返回-1,证明这个过程无法完成,类似于示例里面的第三个情况;

5.代码解释

1)字符串转换为字符数组,tocharArray方法转换;

2)hash数组模拟上面提到的croak这个过程,挪动设计到的下标的变化;

3)HashMap是主要方便去找前驱节点,因为总结里面说了,前驱节点存在,需要前驱节点–,该位置++,HashMap里面的键值对分别表示字符t.charAt获取字符(键),对应下标(值)就是代码里面的i;

4)index就是把这个字符和他的下标绑定在一起,方便我们使用;

5)遍历这个ret字符数组,根据我们的总结里面的内容进行操作:

如果对应的是c,我们去找这个k对应的位置是不是0,也就是代码里面的n-1下标,如果不是0,这个时候n-1位置的数值–,否则我们的0下标就++;

如果对应的是roak里面的字符,也就说不是第一个,我们需要做的就是找i前面的一个元素位置的值是不是存在,存在的话,就是前驱–,该位置++;

前面的元素不存在,直接返回-1,证明字符不完整,无法鸣叫;

6)最后的for讲的是遍历croak里面的前面的四个位置对应的值是不是都是0,如果有一个不是,证明有落单的,这个就无法完成,如果出了k之外的元素对应位置都是0,说明每一个青蛙都是完成了croak的鸣叫,没有中途停留的,我们返回的就是k下标对应的值(表示的最少的青蛙的数量);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15628.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WidowX-250s 机械臂学习记录

官网教程:Python Demos — Interbotix X-Series Arms Documentation 系统:Ubuntu20.04,ROS1 相关的硬件编译配置跳过 Python Demos 这些演示展示了使用 Interbotix Python Arm 模块的各种方法(点击链接查看完整的代码文档&…

【CubeMX-HAL库】STM32F407—无刷电机学习笔记

目录 简介: 学习资料: 跳转目录: 一、工程创建 二、板载LED 三、用户按键 四、蜂鸣器 1.完整IO控制代码 五、TFT彩屏驱动 六、ADC多通道 1.通道确认 2.CubeMX配置 ①开启对应的ADC通道 ②选择规则组通道 ③开启DMA ④开启ADC…

集成右键的好用软件,支持多线程操作!

今天给大家分享一个超级实用的小工具,真的能帮上大忙呢!这个软件是吾爱大神无知灰灰精心制作的,简直就是图片转换界的“小能手”。 它能一键把webp格式的图片转换成png格式,而且速度超快,完全不输那些付费的软件&#…

CSDN 博客之星 2024:肖哥弹架构的社区耕耘总结

#博客之星2024年度总评选—主题文章创作# CSDN 博客之星 2024:肖哥弹架构的社区耕耘总结 肖哥弹架构 是一位专注于技术分享和社区建设的博客作者。今年,我荣幸地再次入选CSDN博客之星TOP300,这不仅是对我过去努力的认可,更是对未…

【分布式理论7】分布式调用之:服务间的(RPC)远程调用

文章目录 一、RPC 调用过程二、RPC 动态代理:屏蔽远程通讯细节1. 动态代理示例2. 如何将动态代理应用于 RPC 三、RPC序列化与协议编码1. RPC 序列化2. RPC 协议编码2.1. 协议编码的作用2.2. RPC 协议消息组成 四、RPC 网络传输1. 网络传输流程2. 关键优化点 一、RPC…

综合评价 | 基于随机变异系数-TOPSIS组合法的综合评价模型(Matlab)

基于随机变异系数-TOPSIS组合法的综合评价模型 代码获取私信回复:综合评价 | 基于随机变异系数-TOPSIS组合法的综合评价模型(Matlab) 一、引言 1.1、研究背景与意义 在现代社会,随着信息量的不断增加和数据复杂性的提升&#…

采用分步式无线控制架构实现水池液位自动化管理

以下是基于巨控GRM241Q-4D4I4QHE模块的完整技术方案,采用分步式无线控制架构实现水池液位自动化管理: 一、系统架构设计 硬件部署 山顶单元 GRM241Q模块(带4G功能) 液位计(4-20mA) 功能:实时采…

Vue设计模式到底多少种?

Vue设计模式到底多少种? 很多同学问,Vue到底有多少种设计模式??各个模式到底是什么意思??又各自适合什么场景?? 这里我给大家直接说下,Vue的设计模式没有一个固定的数值…

[LeetCode] day19 454. 四数相加 II

题目链接 题目描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 输入&…

查看二进制程序内的 .interp 段

synopsis 可以使用 readelf &#xff0c;objdump&#xff0c;hexdump等工具查看 二进制程序内的.interp段信息。 1. 使用readelf查看.interp段 readelf 是一个查看ELF&#xff08;Executable and Linkable Format&#xff09;文件信息的工具&#xff0c;特别适合查看ELF头和…

【时时三省】(C语言基础)基础习题1

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 1.什么是程序&#xff1f;什么是程序设计 程序是为实现特定目标或解决特定问题&#xff0c;用计算机能理解和执行的语言编写的一系列指令的集合。 程序设计是问题分析&#xff0c;设计算法…

食品饮料生产瓶颈?富唯智能协作机器人来 “破壁”

在食品和饮料行业的发展进程中&#xff0c;诸多生产瓶颈如重复性劳动负担、复杂环境作业难题、季节性产能波动等&#xff0c;长期制约着企业的高效运营与进一步发展。如今&#xff0c;富唯智能协作机器人的出现&#xff0c;为这些难题提供了完美的解决方案&#xff0c;正逐步改…

[创业之路-289]:《产品开发管理-方法.流程.工具 》-15- 需求管理 - 第1步:原始需求收集

概述&#xff1a; 需求收集是需求管理的第一步&#xff0c;也是产品开发、项目管理或软件设计中的关键步骤。原始需求收集主要是指从各种来源获取关于产品或服务的初步需求和期望。 以下是对需求管理中的原始需求收集的详细分析&#xff1a; 1、原始需求收集的目的 原始需求…

81页精品PPT | 华为流程与信息化实践与架构规划分享

华为流程与信息化实践与架构规划分享主要围绕华为在业务流程与信息化建设方面的经验、企业架构规划方法以及企业数字化转型路径展开。华为通过持续的业务变革和信息化建设&#xff0c;从本土企业逐步发展为国际化、全球化企业&#xff0c;其管理体系以持续创新和世界级管理体系…

DeepSeek 实践总结

目录 1、与AI对话-万能公式 chatbox 谷歌插件方式 命令行方式 2、ChatPPT+DeepSeek形成PPT 1、与AI对话-万能公式 *明确身份+任务+细节描述+输出格式* 这样的方式能更加准确的帮助你快速获得接近你想法的内容。 身份:你是谁?(网络负责人/记者/老师。。。)任务:要解决什…

51c自动驾驶~合集49

我自己的原文哦~ https://blog.51cto.com/whaosoft/13164876 #Ultra-AV 轨迹预测新基准&#xff01;清华开源&#xff1a;统一自动驾驶纵向轨迹数据集 自动驾驶车辆在交通运输领域展现出巨大潜力&#xff0c;而理解其纵向驾驶行为是实现安全高效自动驾驶的关键。现有的开…

【AI学习】LLM的发展方向

个人的思考&#xff0c;请大家批评。 这一轮AI浪潮&#xff0c;叙事的主要逻辑就是scaling law&#xff0c;模型越大&#xff0c;性能越好&#xff0c;投入越大&#xff0c;性能越好&#xff0c;回报越高&#xff0c;等等。当然&#xff0c;首先要有一个能够scaling的模型架构…

C语言学习笔记:子函数的调用实现各个位的累加和

在C语言程序学习之初&#xff0c;我们都会学习如何打印 hello world&#xff0c;在学习时我们知道了int main&#xff08;&#xff09;是主函数&#xff0c;程序从main函数开始执行&#xff0c;这是流程控制的一部分内容。在主函数中我们想要实现一些功能&#xff0c;比如求各个…

白话文实战Nacos(保姆级教程)

前言 上一篇博客 我们创建好了微服务项目,本篇博客来体验一下Nacos作为注册中心和配置中心的功能。 注册中心 如果我们启动了一个Nacos注册中心,那么微服务比如订单服务,启动后就可以连上注册中心把自己注册上去,这过程就是服务注册。每个微服务,比如商品服务都应该注册…

2025.2.9 每日学习记录2:技术报告写了一半+一点点读后感

0.近期主任务线 1.完成小论文准备 目标是3月份完成实验点1的全部实验和论文。 2.准备教资笔试 打算留个十多天左右&#xff0c;一次性备考笔试的三个科目 1.实习申请技术准备&#xff1a;微调、Agent、RAG 1.今日完成任务 1.电子斗蛐蛐&#xff08;文本书写领域&am…