【模拟算法系列】详解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.rhkb.cn/news/245883.html

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

相关文章

软件测试练手项目,可以写进简历里面的项目实战

最近收到许多自学自动化测试的小伙伴私信&#xff0c;学习了理论知识后&#xff0c;却没有合适的练手项目。 测试本身是一个技术岗位&#xff0c;如果只知道理论&#xff0c;没有实战经验&#xff0c;在面试中很难说服面试官&#xff0c;比如什么场景下需要添加显示等待&#x…

苹果Find My市场需求火爆,伦茨科技ST17H6x芯片助力客户量产

苹果发布AirTag发布以来&#xff0c;大家都更加注重物品的防丢&#xff0c;苹果的 Find My 就可以查找 iPhone、Mac、AirPods、Apple Watch&#xff0c;如今的Find My已经不单单可以查找苹果的设备&#xff0c;随着第三方设备的加入&#xff0c;将丰富Find My Network的版图。产…

java SSM自助快递服务平台myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM自助快递服务平台是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采…

《游戏-03_3D-开发》之—新输入系统人物移动攻击连击

本次修改unity的新输入输出系统。本次修改unity需要重启&#xff0c;请先保存项目&#xff0c; 点击加号起名为MyCtrl&#xff0c; 点击加号设置为一轴的&#xff0c; 继续设置W键&#xff0c; 保存 生成自动脚本&#xff0c; 修改MyPlayer代码&#xff1a; using UnityEngine;…

Web04--Flex布局

1、flex布局 1.1 flex认识 1.2 flex组成 1.3 flex布局 1.3.1 主轴对齐方式 <!DOCTYPE html> <html lang"CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…

基于密码技术的身份认证——基于对称密码体制的身份认证

一、符号说明&#xff1a; A→B&#xff1a;表示通信实体A向通信实体B发送消息&#xff1b; Ek(x)&#xff1a;表示用认证双方共享的密钥K对x进行加密&#xff1b; Text1&#xff0c;Text2&#xff0c;……&#xff0c;Text n属于可选项&#xff1b; ||&#xff1a;表示比特…

正确看待华为鸿蒙……是盲目跟风吗?

先要了解纯血鸿蒙是什么&#xff1f;与之前的套壳Android版本区别在哪&#xff1f;了解这核心东西之后才会真正的看出“纯血鸿蒙”的未来与发展。 纯血鸿蒙全栈自研 HarmonyOS NEXT系统底座全线自研&#xff0c;去掉了传统的Linux内核以及AOSP等代码&#xff0c;仅支持鸿蒙内…

vulnhub靶场之Five86-1

由于这些文章都是从我的hexo博客上面复制下来的&#xff0c;所以有的图片可能不是很完整&#xff0c;但是不受影响&#xff0c;如果有疑问&#xff0c;可以在评论区留言&#xff0c;我看到之后会回复。 一.环境搭建 1.靶场描述 Five86-1 is another purposely built vulnerab…

Linux文本编辑器-vi/vim

一.vi/vim编辑器介绍 vi\vim是visual interface的简称, 是Linux中最经典的文本编辑器 同图形化界面中的 文本编辑器一样&#xff0c;vi是命令行下对文本文件进行编辑的绝佳选择。 vim 是 vi 的加强版本&#xff0c;兼容 vi 的所有指令&#xff0c;不仅能编辑文本&#xff0c;而…

【操作系统】实验九 写一个设备驱动程序

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

OpenAI ChatGPT-4开发笔记2024-07:Embedding之Text Similarity文本相似度

语义相似性semantic similarity 背景结果 背景 OpenAI has made waves online with its innovative embedding and transcription models, leading to breakthroughs in NLP and speech recognition. These models enhance accuracy, efficiency, and flexibility while speed…

蓝桥杯备战——4.继电器/蜂鸣器

1.分析原理图 最好自己先去查查138以及ULN2003的使用方法&#xff0c;我这里直接讲思路。 由上图我们可以看到如果138输入ABC101,则输出Y50,此时若WR通过跳线帽接地则Y5C1 &#xff0c;于是573(U9)处于输出跟随输入P0状态&#xff0c;此时若P061&#xff0c;则573输出Q71&am…

Confluence 的文章导入到 YouTrack KB 中

YouTrack 是有一个 KB 的&#xff0c;我们可以吧 Confluence 的文章全部导入到 YouTrack 的 KB 中。 首先&#xff0c;你需要具有管理员权限&#xff0c;然后选择导入。 然后可以在打开的界面中新增一个导入。 在新增导入中输入 Confluence 在随后的界面中输入你 Confluence …

顶顶通呼叫中心中间件机器人压力测试配置(mod_cti基于FreeSWITCH)

介绍 顶顶通呼叫中心中间件机器人压力测试(mod_cit基于FreeSWITCH) 一、配置acl.conf 打开ccadmin-》点击配置文件-》点击acl.conf-》我这里是已经配置好了的&#xff0c;这里的192.168.31.145是我自己的内网IP&#xff0c;你们还需要自行修改 二、配置线路 打开ccadmin-&g…

【Linux install】详细的Ubuntu和win双系统安装指南

文章目录 1.前期准备1.1 制作启动盘1.2关闭快速启动、安全启动、bitlocker1.2.1 原因1.2.2 进入BIOSshell命令行进入BIOSwindows设置中高级启动在开机时狂按某个键进入BIOS 1.2.3 关闭Fast boot和Secure boot 1.3 划分磁盘空间1.3.1 查看目前的虚拟内存大小 2.开始安装2.1 使用…

在线教育系统开发:构建现代化学习平台

随着科技的迅速发展&#xff0c;在线教育系统在教育领域扮演着越来越重要的角色。本文将深入探讨在线教育系统的开发过程&#xff0c;涉及关键技术和代码实现。 技术选型 在开始开发之前&#xff0c;我们首先需要选择适合在线教育系统的技术栈。以下是一些常见的技术选项&am…

[Vulnhub靶机] DC-1

[Vulnhub靶机] DC-1靶机渗透思路及方法&#xff08;个人分享&#xff09; 靶机下载地址&#xff1a; https://download.vulnhub.com/dc/DC-1.zip 靶机地址&#xff1a;192.168.67.28 攻击机地址&#xff1a;192.168.67.3 一、信息收集 1.使用 arp-scan 命令扫描网段内存活的…

QSqlQuery 执行Update 判断执行成功与否

1.执行更新操作的SQL语句 update s_info set name"009" where contact_number "13511112222" 怎么样判断是否确实更新操作是执行成功的 &#xff0c;可以通过下列语句判断 query.numRowsAffected() > 0 2.主要的几步操作如下: QSqlQuery query;query.…

[git] windows系统安装git教程和配置

一、何为Git Git(读音为/gɪt/)是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。 二、git安装包 有2种版本&#xff0c;Git for Windows Setup和Git for Windows Portable(便携版)两个版本都可以。 三、Git for Windows Por…

安装ddddocr中遇到的问题

1、需要先安装&#xff1a; pip3 install pyinstaller --no-use-pep517 pip install scikit-build pip install setuptools pip install pyinstaller pip install pillow 重要是的是保证一个python 环境&#xff0c;多个python环境会导致各种问题。并且保证python>3.8…