算法6--模拟

ops/2025/1/11 12:19:31/

目录

  • 基础
  • 经典例题
    • 1576. [替换所有的问号](https://leetcode.cn/problems/replace-all-s-to-avoid-consecutive-repeating-characters/description/)
    • 495.[ 提莫攻击](https://leetcode.cn/problems/teemo-attacking/submissions/460223504/)
    • [6. Z 字形变换](https://leetcode.cn/problems/zigzag-conversion/)
    • [38. 外观数列](https://leetcode.cn/problems/count-and-say/description/)
    • [1419. 数青蛙](https://leetcode.cn/problems/minimum-number-of-frogs-croaking/description/)

基础

模拟类型的算法题就是根据题目的要求,使用代码模拟实现某个过程,有时可能会需要找规律来对代码进行一定的优化。

经典例题

1576. 替换所有的问号

给你一个仅包含小写英文字母和 ‘?’ 字符的字符串 s,请你将所有的 ‘?’ 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。
注意:你 不能 修改非 ‘?’ 字符。
题目测试用例保证 除 ‘?’ 字符 之外,不存在连续重复的字符。
在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。

class Solution {
public:string modifyString(string s) {int i=0;for(;i<s.size();++i){if('?'!=s[i]){continue;}char c='a';if(i>0){c=s[i-1]+1;c='a'+(c-'a')%26;}while(i+1<s.size()&&c==s[i+1]){c++;c='a'+(c-'a')%26;}s[i]=c;}return s;}
};

495. 提莫攻击

在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。
当提莫攻击艾希,艾希的中毒状态正好持续 duration 秒。
正式地讲,提莫在 t 发起攻击意味着艾希在时间区间 [t, t + duration - 1](含 t 和 t + duration - 1)处于中毒状态。如果提莫在中毒影响结束 前 再次攻击,中毒状态计时器将会 重置 ,在新的攻击之后,中毒影响将会在 duration 秒后结束。
给你一个 非递减 的整数数组 timeSeries ,其中 timeSeries[i] 表示提莫在 timeSeries[i] 秒时对艾希发起攻击,以及一个表示中毒持续时间的整数 duration 。
返回艾希处于中毒状态的 总 秒数。

int findPoisonedDuration(int* timeSeries, int timeSeriesSize, int duration)
{int wholetime=0;int i=0;for(i=0;i+1<timeSeriesSize;++i){if(timeSeries[i]+duration<=timeSeries[i+1]){wholetime+=duration;}else{wholetime+=timeSeries[i+1]-timeSeries[i];}}wholetime+=duration;return wholetime;
}

6. Z 字形变换

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。
请你实现这个将字符串进行指定行数变换的函数

找规律这道题就可以很好地解决

class Solution {
public:string convert(string s, int numRows) {if(1==numRows){return s;}int i=0;string ans;for(i=0;i<numRows;++i){int j=i;int k=1;int span1=2*(numRows-i-1);int span2=2*i;span1=(0==span1?span2:span1);span2=(0==span2?span1:span2);while(j<s.size()){ans+=s[j];1==k%2?j+=span1:j+=span2;k++;}}return ans;}
};

38. 外观数列

「外观数列」是一个数位字符串序列,由递归公式定义:
countAndSay(1) = “1”
countAndSay(n) 是 countAndSay(n-1) 的行程长度编码。
行程长度编码(RLE)是一种字符串压缩方法,其工作原理是通过将连续相同字符(重复两次或更多次)替换为字符重复次数(运行长度)和字符的串联。例如,要压缩字符串 “3322251” ,我们将 “33” 用 “23” 替换,将 “222” 用 “32” 替换,将 “5” 用 “15” 替换并将 “1” 用 “11” 替换。因此压缩后字符串变为 “23321511”。
给定一个整数 n ,返回 外观数列 的第 n 个元素。

class Solution {
public:string countAndSay(int n) {if(1==n){return "1";}string ret=countAndSay(n-1);string ans;int i=1;int count=1;for(;i<=ret.size();++i){if(i==ret.size()||ret[i-1]!=ret[i]){ans+=to_string(count);ans.push_back(ret[i-1]);count=1;continue;}++count;}return ans;}
};

1419. 数青蛙

给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 “croak” )的组合。由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFrogs 中会混合多个 “croak” 。
请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。
要想发出蛙鸣 “croak”,青蛙必须 依序 输出 ‘c’, ’r’, ’o’, ’a’, ’k’ 这 5 个字母。如果没有输出全部五个字母,那么它就不会发出声音。如果字符串 croakOfFrogs 不是由若干有效的 “croak” 字符混合而成,请返回 -1 。

使用一个哈希表分别记录正在发出声音c、r、o、a、k的青蛙的个数,遍历字符串 croakOfFrogs,如果是字符r、o、a、k之一,如果它的前一个字符的数量为0,说明该字符串不是有效字符,直接返回-1即可,否则前一个字符的数量减1,当前字符的数量加1;如果当前当前字符是c,先对当前字符的数量加1,接着检查字符k的数量是否为0,非0就减1,否则什么也不做。遍历结束后,如果c、r、o、a对应的数量为0,说明字符串是有效字符,k对应的数量就是模拟字符串中所有蛙鸣所需不同青蛙的最少数目,否则说明字符串无效返回-1。

class Solution {
public:int minNumberOfFrogs(string croakOfFrogs) {map<char,int> mp;mp['c']=0;mp['r']=1;mp['o']=2;mp['a']=3;mp['k']=4;vector<int> count(5,0);int i=0;for(i=0;i<croakOfFrogs.size();++i){if('c'==croakOfFrogs[i]){count[0]+=1;if(count[4]){count[4]--;}}else {if(!count[mp[croakOfFrogs[i]]-1]){return -1;}count[mp[croakOfFrogs[i]]-1]--;count[mp[croakOfFrogs[i]]]++;}}for(i=0;i<4;++i){if(count[i]){return -1;}}return count[4];}
};

http://www.ppmy.cn/ops/149155.html

相关文章

python无需验证码免登录12306抢票 --selenium(2)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 [TOC](python无需验证码免登录12306抢票 --selenium(2)) 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 就在刚刚我抢的票&#xff1a;2025年1月8日…

数据采集标注在智能导航系统中的应用案例

‌智能导航系统是一种基于GPS定位技术和人工智能算法的导航软件&#xff0c;其可根据用户的位置、路线和交通情况等信息&#xff0c;提供最佳的出行路线和导航服务‌。‌智能导航系统综合应用了信息管理、认知心理学与行为学、人工智能等多学科理论与技术&#xff0c;自主识别用…

深入Android架构(从线程到AIDL)_22 IPC的Proxy-Stub设计模式04

目录 5、 谁来写Proxy及Stub类呢? 如何考虑人的分工 IA接口知识取得的难题 在编程上&#xff0c;有什么技术可以实现这个方法&#xff1f; 范例 5、 谁来写Proxy及Stub类呢? -- 强龙提供AIDL工具&#xff0c;给地头蛇产出Proxy和Stub类 如何考虑人的分工 由框架开发者…

在Windows环境下搭建无人机模拟器

最近要开发无人机地面站&#xff0c;但是没有无人机&#xff0c;开发无人机对我来说也是大姑娘坐花轿——头一回。我们要用 MAVLink 和无人机之间通信&#xff0c;看了几天 MAVLink&#xff0c;还是不得劲儿&#xff0c;没有实物实在是不好弄&#xff0c;所以想先装一个无人机模…

Swagger学习⑯——@ApiResponses注解

介绍 ApiResponses 是 Swagger/OpenAPI 注解库中的一个注解&#xff0c;用于在 Java 应用程序中为 API 方法定义多个响应。它是 ApiResponse 注解的容器注解&#xff0c;允许你为一个 API 方法指定多个可能的响应。 基本用法 ApiResponses 通常与 ApiResponse 一起使用&…

青少年编程与数学 02-006 前端开发框架VUE 18课题、逻辑复用

青少年编程与数学 02-006 前端开发框架VUE 18课题、逻辑复用 一、组合式函数什么是“组合式函数”&#xff1f;鼠标跟踪器示例异步状态示例接收响应式状态 约定和最佳实践命名输入参数返回值副作用使用限制 在选项式 API 中使用组合式函数与其他模式的比较和 Mixin 的对比和无渲…

git 转移文件夹

打开终端或命令行界面&#xff1a;首先&#xff0c;确保你的电脑上安装了 Git&#xff0c;并打开终端或命令行界面。 导航到你的仓库目录&#xff1a;使用 cd 命令来切换到包含你想要移动文件夹的仓库的目录。 cd /path/to/your/repository使用 git mv 命令移动文件夹&#x…

[SAP ABAP] 使用LOOP AT...ASSIGNING FIELD-SYMBOL 直接更新内表数据

使用 LOOP AT...ASSIGNING FIELD-SYMBOL... 可以直接修改内表中的数据&#xff0c;而不需要先将内表数据复制到相应的工作区&#xff0c;然后再更新回内表中&#xff0c;从而提高性能 针对上述代码进行优化&#xff0c;我们使用LOOP AT...ASSIGNING FIELD-SYMBOL 直接更新内表数…