《算法闯关指南:优选算法--模拟》--43.数青蛙

《算法闯关指南:优选算法--模拟》--43.数青蛙
在这里插入图片描述

🔥草莓熊Lotso:个人主页
❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》
✨生活是默默的坚持,毅力是永久的享受!


🎬 博主简介:

在这里插入图片描述

文章目录


前言:

聚焦算法题实战,系统讲解三大核心板块:优选算法:剖析动态规划、二分法等高效策略,学会寻找“最优解”。 递归与回溯:掌握问题分解与状态回退,攻克组合、排列等难题。 贪心算法:理解“局部最优”到“全局最优”的思路,解决区间调度等问题 内容以题带点,讲解思路与代码实现,帮助大家快速提升代码能力。

43. 数青蛙

题目链接

1419. 数青蛙 - 力扣(LeetCode)

题目描述

在这里插入图片描述


题目示例

在这里插入图片描述

解法(模拟+分情况讨论):

算法思路:

模拟青蛙的叫声。

  • 当遇到 'r' 'o' 'a' 'k' 这四个字符的时候,我们要去看看每一个字符对应的前驱字符,有没有青蛙叫出来。如果有青蛙叫出来,那么就让这个青蛙接下来喊出这个字符;如果没有,直接返回 -1
  • 当遇到 ‘c’ 这个字符的时候,我们去看看 ‘k’ 这个字符有没有青蛙叫出来。如果有,就让这个青蛙继续去 ‘c’ 这个字符;如果没有的话,就重新整一个青蛙出来

C++算法代码:

classSolution{public:intminNumberOfFrogs(string croakOfFrogs){ string s="croak";int n=s.size(); unordered_map<char,int> index;//记录字符映射下标关系 vector<int>hash(n);//数组模拟哈希表for(int i=0;i<n;i++) index[s[i]]=i;for(auto& ch:croakOfFrogs){if(ch=='c'){if(hash[n-1]!=0) hash[n-1]--; hash[0]++;}else{int t=index[ch];if(hash[t-1]==0)return-1; hash[t-1]--,hash[t]++;}}for(int i=0;i<n-1;i++)if(hash[i]!=0)return-1;return hash[n-1];}};

算法总结&&笔记展示:

笔记字有点丑,大家见谅:

在这里插入图片描述


在这里插入图片描述

结尾:

🍓 我是草莓熊 Lotso!若这篇技术干货帮你打通了学习中的卡点: 👀 【关注】跟我一起深耕技术领域,从基础到进阶,见证每一次成长 ❤️ 【点赞】让优质内容被更多人看见,让知识传递更有力量 ⭐ 【收藏】把核心知识点、实战技巧存好,需要时直接查、随时用 💬 【评论】分享你的经验或疑问(比如曾踩过的技术坑?),一起交流避坑 🗳️ 【投票】用你的选择助力社区内容方向,告诉大家哪个技术点最该重点拆解 技术之路难免有困惑,但同行的人会让前进更有方向~愿我们都能在自己专注的领域里,一步步靠近心中的技术目标! 

结语:本文探讨了LeetCode 1419题"数青蛙"的解法,通过模拟青蛙叫声过程,分析字符序列croak的匹配逻辑。算法使用哈希表记录字符位置,并动态维护各阶段字符计数:当遇到c时复用已完成k的青蛙或新增青蛙;其他字符则需前驱字符存在才能继续。最后检查未完成序列的青蛙数量。解法高效且思路清晰。

✨把这些内容吃透超牛的!放松下吧✨ʕ˘ᴥ˘ʔづきらど

Read more

基于历史学习的拥塞控制算法

华夏创新都知道的吧,但没几个能学明白它们的,但拙劣的模仿者倒是不在少数。 几乎所有号称基于学习的,基于历史的拥塞控制算法都是在利用局部性原理,比如简单的移动指数平均,企图用刚刚逝去的历史启动现在,你会看到,即便历史已经表明 RTT 事实上一直在上下波动,这种启发式算法给出的永远是一个单独的预测值,你觉得这个值能准确到哪去。 曾经 Linux 内核有个 net.ipv4.tcp_no_metrics_save = 0 参数,但几乎没什么卵用,你仿照它的实现在里面再多增加几个 metric,依然没什么卵用,因为你不懂长程依赖的发现要在不同跨度错开,但一说傅里叶级数你就又懂了。 依然是用历史去启发现在,只不过是用不同时间跨度的同比替代单一环比,难道不是这种策略更能精确刻画历史的每一个细节吗,所有的尺度同比数据就摆在那里,就像傅里叶展开一样,你将看到整个历史在任意精度下的全貌,而不只是一个值,事实上,可以认为同比是大跨度的环比。 你会发现,用 n 个跨度的移动指数平均跟踪 RTT,可以快速发现长程依赖的规律,接下来你就知道什么时间段设置什么 cwnd 了,就是这么简单。 我准备连续观

By Ne0inhk
《算法题讲解指南:优选算法-分治-快排》--45.数组中的第k个最大元素,46.最小的k个数

《算法题讲解指南:优选算法-分治-快排》--45.数组中的第k个最大元素,46.最小的k个数

🔥小叶-duck:个人主页 ❄️个人专栏:《Data-Structure-Learning》 《C++入门到进阶&自我学习过程记录》《算法题讲解指南》--优选算法 ✨未择之路,不须回头 已择之路,纵是荆棘遍野,亦作花海遨游 目录 45.数组中的第k个最大元素 题目链接: 题目描述: 题目示例: 解法(快速选择算法): 算法思路: C++算法代码: 算法总结及流程解析: 46.最小的k个数 题目链接: 题目描述: 题目示例: 编辑 解法(快速选择算法): 算法思路: C++算法代码: 算法总结及流程解析: 结束语 45.数组中的第k个最大元素 题目链接: 215. 数组中的第K个最大元素 - 力扣(LeetCode) 题目描述: 题目示例:

By Ne0inhk
哈希表进阶:挑战用哈希桶封装unordered_set和unordered_map,帮你深度理解迭代器!!!

哈希表进阶:挑战用哈希桶封装unordered_set和unordered_map,帮你深度理解迭代器!!!

专栏:🎉《C++》 📌《数据结构》 💡《C语言》 🚀《Linux》 前言 前一篇文章:《【高阶数据结构】哈希表 》中我们已经分析了哈希表结构,以及如何用开放定址法和链地址法(哈希桶)设计实现哈希表,最主要的就是:怎样避免哈希冲突,显然,哈希桶完胜开放定址法。所以,我们今天进一步完善哈希桶的结构,然后来自己封装unordered_set和unordered_map。 目录 前言 一、常见接口详解(C++标准库) 1.1、unordered_set / unordered_map 1.2、接口测试 💦插入 / 遍历比较: 💦性能测试 二、哈希桶实现(进阶) 2.1、模板参数说明 2.2、获取键值---仿函数 2.

By Ne0inhk
《算法闯关指南:优选算法--位运算》--34.判断字符是否唯一,35.丢失的数字

《算法闯关指南:优选算法--位运算》--34.判断字符是否唯一,35.丢失的数字

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 位运算基础前置知识 * 34. 判断字符是否唯一 * 解法(位图的思想): * 算法思路: * C++算法代码: * 算法总结&&笔记展示: * 35. 丢失的数字 * 解法(位运算): * 算法思路: * C++算法代码: * 算法总结&&笔记展示: * 结尾: 前言: 聚焦算法题实战,系统讲解三大核心板块:优选算法:剖析动态规划、二分法等高效策略,学会寻找“最优解”。 递归与回溯:掌握问题分解与状态回退,攻克组合、排列等难题。 贪心算法:

By Ne0inhk