【模拟算法系列】详解5道题

本文讲解模拟算法系列的5道经典题,在讲解题目的同时提供AC代码,点击题目即可打开对应OJ链接

目录

模拟算法的介绍

1、替换所有的问号

2、提莫攻击

3、 Z 字形变换

4、外观数列

5、数青蛙


模拟算法的介绍

题目中明确告诉你要干什么,思路简单,较考察代码能力

做题步骤:

  • 模拟算法流程(自己一定要演示一下) 
  • 把流程转换为代码

大部分的模拟题的优化方式都是通过找规律


1、替换所有的问号

 算法思路:

从前往后遍历整个字符串,当出现问号时,枚举a~z字符替换,只要不跟前面或后面的字符相等即可,边界问题:若?为第一个字符,只判断后面即可,若?为最后一个字符,只判断前面即可

class Solution {
public:string modifyString(string s) {int n = s.size();for (int i = 0; i < n; i++){if (s[i] == '?'){for (char ch = 'a'; ch <= 'z'; ch++){   //如果为第一个位置或最后一个位置,则利用||不用判断前面或后面的字符if ((i == 0 || ch != s[i - 1]) && (i == n - 1 || ch != s[i + 1])){s[i] = ch;break;}}}}return s;}
};

2、提莫攻击

 算法思路:

模拟+分情况讨论。
计算相邻两个时间点的差值:

  • 如果差值大于等于中毒时间,说明上次中毒可以持续 duration 秒;
  • 如果差值小于中毒时间,那么上次的中毒只能持续两者的差值
class Solution {
public:int findPoisonedDuration(vector<int>& timeSeries, int duration) {int ret = 0;for (int i = 1; i < timeSeries.size(); i++){int x = timeSeries[i] - timeSeries[i - 1];if (x >= duration) ret += duration;else ret += x;}return ret + duration;//要把最后一个位置的中毒时间加上}
};

3、 Z 字形变换

 分析题目:

解题思路:

 可以定义一个字符串用来保存结果,当遇到目标字符就利用string的+=来保存结果,所以我们只需知道需要保存的字符的顺序和位置即可

下面找规律按照①~④推得来:

class Solution {
public:string convert(string s, int numRows) {//处理边界情况【处理第一行时会死循环,报超出时间限制】if (numRows == 1) return s;string ret;//保存结果的字符串//1、处理第一行int d = 2 * numRows - 2, n = s.size();for (int i = 0; i < n; i += d) ret += s[i];//2、处理中间行for (int k = 1; k < numRows - 1; k++)//循环中间的每一行{for (int i = k, j = d - k; i < n || j < n; i += d, j += d){   //两个元素哪个没走到头就加哪个if (i < n) ret += s[i];if (j < n) ret += s[j];}}//3、处理最后一行for (int i = numRows - 1; i < n; i += d) ret += s[i];return ret;}
};

4、外观数列

 解题思路:

class Solution {
public:string countAndSay(int n) {string ret = "1";//初始状态for (int i = 1; i < n; i++) //进行n-1次即为答案{string tmp;//要用临时变量保存每次得到的结果,直接加到ret上就累积了,结果不对int len = ret.size();for (int left = 0, right = 0; right < len;){while (right < len && ret[left] == ret[right]) right++;//找连续相同区域tmp += to_string(right - left) + ret[left];//利用to_string将整数转换为字符串left = right;}ret = tmp;//每次都更新下结果}return ret;}
};

5、数青蛙

解题思路:模拟+哈希表

 注:最后模拟完后,哈希表中应该只有k位置有数,其他位置都应没数,如果有,则不符题意,即代码最后还要做一下判断

class Solution {
public:int minNumberOfFrogs(string croakOfFrogs) {string t = "croak";int n = t.size();vector<int> hash(n); //数组模拟哈希表unordered_map<char, int> index; //保存字符及其下标,方便找到字符for (int i = 0; i < n; i++) index[t[i]] = i;for (auto ch : croakOfFrogs){if (ch == 'c'){if (hash[n - 1] != 0) hash[n - 1]--;hash[0]++;}else{int i = index[ch];//先获取该字符的下标if (hash[i - 1] == 0) return -1;//若前驱字符不存在hash[i - 1]--, hash[i]++;}}//判断除了k位置外,其他的位置若也有数,则说明不是croak的有效组合for (int i = 0; i < n - 1; i++) if (hash[i] != 0) return -1;return hash[n - 1];//k位置出现几次,就至少几只青蛙}
};

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

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

相关文章

C++ //练习 3.3 请说明string类的输入运算符和getline函数分别是如何处理空白字符的。

C Primer&#xff08;第5版&#xff09; 练习 3.3 练习 3.3 请说明string类的输入运算符和getline函数分别是如何处理空白字符的。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 解释 cin读取并忽略有效字符之前所有的空白字符&…

打开文件:内核做了什么

一.文件描述符本质 文件描述符的是一个非负整数&#xff0c;它是操作系统内核用来标识和管理打开文件的抽象概念。在 Linux 和其他类 Unix 操作系统中&#xff0c;几乎所有与文件相关的操作都是通过文件描述符来进行的。 文件描述符是操作系统内核为每个进程维护的一个表&…

ChatGPT 和文心一言 | 两大AI助手哪个更胜一筹

欢迎来到英杰社区&#xff1a; https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区&#xff1a; https://bbs.csdn.net/topics/617897397 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff…

Web开发4:单元测试

在Web开发中&#xff0c;单元测试是一种重要的开发实践&#xff0c;它可以帮助我们确保代码的质量和可靠性。通过编写和运行单元测试&#xff0c;我们可以验证代码的正确性&#xff0c;减少错误和缺陷&#xff0c;并提高代码的可维护性。本文将介绍单元测试的概念、好处以及如何…

券商既然是发行债券的人,为什么他还收中介费呢?

券商在金融市场中扮演着多种角色&#xff0c;其中发行债券只是其业务的一部分。券商作为金融中介机构&#xff0c;其主要功能是为投资者和融资者提供撮合服务&#xff0c;促进金融市场的有效运行。 当券商作为发行债券的角色时&#xff0c;它们会帮助公司或政府等机构发行债券…

Chrome 浏览器插件 runtime 字段解析

运行时 runtime 使用 chrome.runtime API 检索 Service Worker&#xff0c;返回有关 manifest.json 的详细信息监听和响应应用或扩展程序生命周期中的事件还可以使用此 API 将网址的相对路径转换为完整的一个 URL 一、权限 Runtime API 上的大多数方法都不需要任何权限 但是…

头歌C++之Switch控制语句编程实训

目录 第1关:根据输入数字判断是星期几 本关必读 本关任务 测试说明 第2关:根据输入的数值和运算符做相应运算 本关必读 本关任务 测试说明 第3关:根据输入年月计算该月份的天数 本关必读 本关任务

python写一个彩票中奖小游戏修订版本

先说规则&#xff1a; print("下面介绍双色球颜色规则:")print("一等奖,投注号码与当期开奖号码全部相同&#xff08;顺序不限&#xff0c;下同&#xff09;&#xff0c;即中奖")print("二等奖:投注号码与当期开奖号码中的6个红色球号码相同,即中奖&q…

鸿蒙开发实战-手写文心一言AI对话APP

运行环境 &#xff08;后面附有API9版本&#xff0c;可修改后在HarmonyOS4设备上运行&#xff09; DAYU200:4.0.10.16 SDK&#xff1a;4.0.10.15 IDE&#xff1a;4.0.600 在DAYU200:4.0.10.16上运行 一、创建应用 1.点击File->new File->Create Progect 2.选择模版…

分享7种SQL的进阶用法

分享7种SQL的进阶用法 前言 还只会使用SQL进行简单的insert、update、detele吗&#xff1f;本文给大家带来7种SQL的进阶用法&#xff0c;让大家在平常工作中使用SQL简化复杂的代码逻辑。 1.自定义排序&#xff08;ORDER BY FIELD&#xff09; 在MySQL中ORDER BY排序除了可以…

【C语言】结构体与内存操作函数 总结

结构体 一、结构体简介 C 语言内置的数据类型&#xff0c;除了最基本的几种原始类型&#xff0c;只有数组属于复合类型&#xff0c;可以同时包含多个值&#xff0c;但是只能包含相同类型的数据&#xff0c;实际使用中并不够用。 实际使用中&#xff0c;主要有下面两种情况&a…

temu跨境电商怎么样?做temu蓝海项目有哪些优势?

在全球电商市场激烈的竞争中&#xff0c;Temu跨境电商平台以其独特的优势和策略&#xff0c;逐渐崭露头角。对于许多想要拓展海外市场的商家来说&#xff0c;Temu的蓝海项目提供了一个充满机遇的新平台。本文将深入探讨Temu跨境电商的优势以及在蓝海市场中的发展前景。 全球化市…

redis 工具类

在Spring Boot项目中&#xff0c;Redis是一个常用的分布式缓存解决方案。下面展示的RedisCache工具类封装了对Redis进行基本操作的方法&#xff0c;包括存储和获取各种类型的数据、设置过期时间以及处理集合类型的缓存。 /*** redis 工具类***/ SuppressWarnings(value { &q…

编程笔记 html5cssjs 056 CSS不透明度

编程笔记 html5&css&js 056 CSS不透明度 一、CSS 不透明度 / 透明度二、使用 RGBA 的透明度三、透明盒中的文本小结 不透明度/透明度。利用透明度可以提高页面的层次效果。 一、CSS 不透明度 / 透明度 opacity 属性指定元素的不透明度/透明度。 opacity 属性通常与 :h…

仅使用 Python 创建的 Web 应用程序(前端版本)第08章_商品详细

在本章中,我们将实现一个产品详细信息页面。 完成后的图像如下。 Model、MockDB、Service都是在产品列表页实现的,所以创建步骤如下。 No分类内容1Page定义PageId并创建继承自BasePage的页面类2Application将页面 ID 和页面类对添加到 MultiPageApp 的页面中Page:定义PageI…

Ruby安装与使用指南

Ruby安装与使用指南 介绍 Ruby是一种动态、开源的编程语言&#xff0c;以简洁、灵活的语法而闻名。它被广泛应用于Web开发、脚本编写以及构建各种应用程序。本教程将带领你一步步学习如何在不同操作系统上安装和使用Ruby。 第一部分&#xff1a;安装Ruby 1. 在Windows上安装…

Git管理秘籍:Python项目中的.gitignore策略

.gitignore的配置与使用规则 注意: .gitignore最好放在根目录中。如果gitignore放在被忽略的父目录中&#xff0c;那忽略文件就无法生效。 1.1 .gitignore使用规则 .gitignore只能忽略那些原来没有被track的文件&#xff0c;如果某些文件已经被纳入了版本管理中&#xff0c…

VsCode提高生产力的插件推荐-持续更新中

别名路径跳转 自定义配置// 文件名别名跳转 "alias-skip.mappings": { "~/": "/src", "views": "/src/views", "assets": "/src/assets", "network": "/src/network", "comm…

代码CE:reference to ‘XX‘ is ambiguous

代码CE:reference to ‘XX’ is ambiguous 今天提交代码的时候一直错误&#xff0c;CE&#xff0c;搞不明白明明在dev上成功&#xff0c;为什么提交失败。 现在懂了&#xff0c;因为定义的变量和C内部函数或变量重名了。修改之后即可AC。 int data[21][21]{0}; int maxsum[21…

《动手学深度学习(PyTorch版)》笔记3.2

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…