蓝桥杯---数青蛙(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下标对应的值(表示的最少的青蛙的数量);

相关文章:
蓝桥杯---数青蛙(leetcode第1419题)
文章目录 1.题目重述2.例子分析3.思路分析4.思路总结5.代码解释 1.题目重述 这个题目算是模拟这个专题里面的一类比较难的题目了,他主要是使用crock这个单词作为一个整体,让我们确定:给你一个字符串,至少需要多少个青蛙进行完成鸣…...
单片机之基本元器件的工作原理
一、二极管 二极管的工作原理 二极管是一种由P型半导体和N型半导体结合形成的PN结器件,具有单向导电性。 1. PN结形成 P型半导体:掺入三价元素,形成空穴作为多数载流子。N型半导体:掺入五价元素,形成自由电子作为多…...
Spring Boot + MyBatis Field ‘xxx‘ doesn‘t have a default value 问题排查与解决
目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 执行代码的时候,出现某个字段无法添加 ### Error updating database. Cause: java.sql.SQLException: Field e_f_id doesnt have a default value ### The error may exist in cn...
C++ STL Map 学习学案(提高版)
C++ STL Map 学案(初中生版) 一、学习目标 深入理解 STL 中 map 容器的概念、特点和用途。熟练掌握 map 容器的基本操作,如插入、查找、删除和遍历元素。能够运用 map 容器解决实际编程问题,提升逻辑思维和编程实践能力。二、知识讲解 引入 在日常生活中,我们常常会遇到…...
OpenEuler学习笔记(二十三):在OpenEuler上部署开源MES系统
在OpenEuler上部署小企业开源MES(制造执行系统,Manufacturing Execution System)是一个非常有价值的项目,可以帮助企业实现生产过程的数字化管理。以下是基于开源MES系统(如 Odoo MES 或 OpenMES)的部署步骤…...
深入与浅出-Python爬虫逆向实战
一、什么是爬虫逆向? 爬虫逆向,简单来说,就是通过分析网页的前端和后端行为,找出数据的来源和获取方式,从而实现自动化抓取。很多时候,直接使用requests和BeautifulSoup可能无法获取到目标数据,…...
ubuntu中如何在vscode的终端目录后显示(当前的git分支名) 实测有用
效果展示 配置过程: 在 Ubuntu 中,如果你想在 VS Code 的终端提示符后显示当前的 Git 分支名,可以通过修改 Shell 配置文件(如 ~/.bashrc 或 ~/.zshrc)来实现。以下是具体步骤: 1. 确定使用的 Shell 首…...
什么是自回归范式
Autoregressive Paradigm(自回归范式)是一种广泛应用于 序列数据建模 的方法,它在生成模型中发挥着重要作用。自回归范式的核心思想是 基于已知的历史信息(或前一个状态),来预测下一个值。这种方法在 时间序…...
Jenkins 使用教程:从入门到精通
在软件开发的复杂流程中,持续集成与持续交付(CI/CD)是提升开发效率和保障软件质量的核心实践。Jenkins 作为一款备受欢迎的开源自动化服务器,在 CI/CD 流程中发挥着举足轻重的作用。本文将深入、详细地介绍 Jenkins 的使用方法&am…...
DeepSeek大模型的微调流程
DeepSeek大模型的微调流程通常包括以下几个步骤: 1. 环境准备 硬件:确保有足够的GPU资源,通常需要高性能GPU(如NVIDIA A100、V100等)。软件:安装必要的深度学习框架(如PyTorch、TensorFlow&am…...
关于“i18n“在vue中的使用
关于"i18n"在vue中的使用 <!-- vue2中 --> <template><div>{{ $t("This campaign has expired.") }}}}</div> </template> <script> export default {created() {this.onLoading();},methods: {onLoading () {this.$…...
Android图片加载框架Coil,Kotlin
Android图片加载框架Coil,Kotlin implementation("io.coil-kt:coil:1.4.0") import android.os.Bundle import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import coil.Coil i…...
从二叉树遍历深入理解BFS和DFS
1. 介绍 1.1 基础 BFS(Breadth-First Search,广度优先搜索)和 DFS(Depth-First Search,深度优先搜索)是两种常见的图和树的遍历算法。 BFS:从根节点(或起始节点)开始&am…...
强化学习之 PPO 算法:原理、实现与案例深度剖析
目录 一、引言二、PPO 算法原理2.1 策略梯度2.2 PPO 核心思想 三、PPO 算法公式推导3.1 重要性采样3.2 优势函数估计 四、PPO 算法代码实现(以 Python 和 PyTorch 为例)五、PPO 算法案例应用5.1 机器人控制5.2 自动驾驶 六、总结 一、引言 强化学习作为…...
Docker 部署 MongoDB | 国内阿里镜像
一、简易单机版 1、镜像拉取 docker pull registry.cn-hangzhou.aliyuncs.com/farerboy/mongo:8.0.5-rc1 2、运行镜像 docker run -it --name mongodb \ -e MONGO_INITDB_ROOT_USERNAMEmongoroot \ -e MONGO_INITDB_ROOT_PASSWORDmongoroot \ -v /wwwroot/opt/docker/mong…...
1.1 Spring Security 概述
Spring Security 概述 1. 什么是 Spring Security? Spring Security 是 Spring 生态中专注于应用安全的核心框架,为 Java 企业应用提供认证(Authentication)、授权(Authorization)以及安全攻击防护&#x…...
Kotlin协程详解——协程上下文
目录 一、上下文结构 get()获取元素 minusKey()删除元素 fold()元素遍历 plus()添加元素 CombinedContext Key 二、协程名称CoroutineName 三、上下文组合 四、协程作用域CoroutineScope 五、典型用例 协程的上下文,它包含用户定义的一些数据集合&#x…...
手写一个C++ Android Binder服务及源码分析
手写一个C Android Binder服务及源码分析 前言一、 基于C语言编写Android Binder跨进程通信Demo总结及改进二、C语言编写自己的Binder服务Demo1. binder服务demo功能介绍2. binder服务demo代码结构图3. binder服务demo代码实现3.1 IHelloService.h代码实现3.2 BnHelloService.c…...
今日AI和商界事件(2025-02-10)
今日AI领域的相关事件包括: 一、技术与应用进展 全球首例AI驱动供应链攻击曝光: 网络安全机构披露一起新型供应链攻击事件,攻击者利用AI技术生成高度仿真的供应商邮件,诱骗目标企业员工下载恶意软件,进而渗透至大众汽…...
全面理解-c++中的异常处理机制
C 的异常处理机制是一种用于处理程序运行时错误的结构化方法,通过分离正常逻辑与错误处理代码,提高代码的可读性和可维护性。以下是其核心组成部分和工作原理的详细说明: 1. 异常处理的三大关键字 1.1 try 块 作用:包裹可能抛出异…...
Deep Dive into LLMs like ChatGPT - by Andrej Karpathy
https://www.youtube.com/watch?v7xTGNNLPyMIhttps://www.youtube.com/watch?v7xTGNNLPyMIDeep Dive into LLMs like ChatGPT - by Andrej Karpathy_哔哩哔哩_bilibilihttps://www.youtube.com/watch?v7xTGNNLPyMI转载自Andrej Karpathy Youtube ChannelThis is a general a…...
react实例与总结(一)
目录 一、简单认识 1.1、特点 1.2、JSX语法规则 1.3、函数组件和类式组件 1.4、类组件三大属性state、props、refs 1.4.1、state 1.4.2、props 1.4.3、refs 1.5、事件处理 1.6、收集表单数据—非受控组件和受控组件 1.7、高阶函数—函数柯里化 1.8、生命周期—新旧…...
51单片机(国信长天)矩阵键盘的基本操作
在CT107D单片机综合训练平台上,首先将J5处的跳帽接到1~2引脚,使按键S4~S19按键组成4X4的矩阵键盘。在扫描按键的过程中,发现有按键触发信号后(不做去抖动),待按键松开后,在数码管的第一位显示相应的数字:从左至右&…...
在cursor/vscode中使用godot C#进行游戏开发
要在 Visual Studio Code(VS Code)中启动 C#Godot 项目,可以按照以下步骤进行配置: 1.安装必要的工具 • 安装 Visual Studio Code:确保你已经安装了最新版本的 VS Code。 • 安装.NET SDK:下载并安装.NET 7.x SDK(…...
机器学习怎么学习,还有算法基本的源代码
1.scikit-learn官方文档,中文版/英文版 中文社区:https://scikit-learn.org.cn/ 中文官方文档:https://scikitlearn.com.cn/ 英文版:https://scikit-learn.org/stable/(翻墙) 2.菜鸟教程:AI&a…...
STM32 RTC亚秒
rtc时钟功能实现:rtc模块在stm32内部,由电池或者主电源供电。如下图,需注意实现时仅需设置一次初始化。 1、stm32cubemx 代码生成界面设置,仅需开启时钟源和激活日历功能。 2、生成的代码,需要对时钟进行初始化,仅需…...
【Linux】深入理解linux权限
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:Linux 目录 前言 一、权限是什么 二、用户和身份角色 三、文件属性 1. 文件属性表示 2. 文件类型 3. 文件的权限属性 四、修改文件的权限属性和角色 1. …...
json格式,curl命令,及轻量化处理工具
一. JSON格式 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于一个子集的JavaScript编程语言,使用人类易于阅读的文本格式来存储和表示数据。尽管名字中有“JavaScript”,但JSON是语言无关的,几…...
DeepSeek模拟阿里面试——java面向对象
作为一位阿里高级Java程序员面试官,我会围绕Java面向对象编程的核心概念、实际应用以及设计原则设计问题,以全面评估候选人的理解和应用能力。以下是可能的面试问题: 基本概念与实现方式 请解释Java中封装、继承、多态的基本概念及其在Java中…...
web直播弹幕抓取分析 signature
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言 最近遇到太多难点了卡了很久&am…...
