跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
C++算法

算法模拟法解题实战

模拟算法通过直接复现题目描述的过程来解决问题。文章涵盖替换问号避免连续重复字符、计算提莫攻击中毒时长、Z 字形变换规律分析、外观数列生成逻辑以及最小青蛙叫声数量统计。核心在于遍历字符串或数组时处理边界条件与状态转移,代码实现以 C++ 为主,注重时间复杂度优化与特殊情况判断。

BigDataPan发布于 2026/3/24更新于 2026/5/18 浏览

相关题解

1.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.2提莫攻击

算法思路:

模拟 + 分情况讨论。

计算相邻两个时间点的差值:

  1. 若差值大于等于中毒时间,说明上次中毒可以持续 duration 秒;
  2. 若差值小于中毒时间,说明此时发生了中毒叠加,那么上次的中毒只能持续两者的差值。
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+=x; else ret+=duration; } //别忘记,最后一次的中毒也需要加上一个 duration return ret+duration; } };

2.3Z 字形变换

算法思路(模拟 + 找规律):

找规律,用 row 代替行数,row=4 时画出的 N 字形如下:

文章配图

可以发现,数据是以 2row-2 为一个周期进行规律变换的。将所有数替换成用周期来表示的变量:

第一行的数是:0,2row-2,4row-4; 第二行的数是:1,(2row-2)-1,(2row-2)+1,(4row-4)-1,(4row-4)+1; 第三行的数是:2,(2row-2)-2,(2row-2)+2,(4row-4)-2,(4row-4)+2; 第四行的数是:3,(2row-2)+3,(4row-4)+3。

首末行规律相同,中间行规律相同。

class Solution { public: string convert(string s, int numRows) { //处理边界情况 if(numRows==1) return s; string ret; int d=2*numRows-2,n=s.size(); //1.处理第一行 for(int i=0;i<n;i+=d) ret+=s[i]; //2.处理中间行 for(int i=1;i<numRows-1;i++){//中间的每一行 for(int j=i,k=d-i;j<n||k<n;j+=d,k+=d){ if(j<n) ret+=s[j]; if(k<n) ret+=s[k]; } } //3.处理最后一行 for(int i=numRows-1;i<n;i+=d){ ret+=s[i]; } return ret; } };

2.4外观数列

算法思路:

【外观数列】,就是依次统计字符串中连续且相同的字符的个数。

class Solution { public: string countAndSay(int n) { string s("1"); n--;//循环 n-1 次 while(n--){ string tmp; int left=0,right=0,len=s.size(); while(right<len){ while(s[left]==s[right]&&right<len) right++; tmp+=to_string(right-left)+s[left]; left=right; } s=tmp; } return s; } };

2.5数青蛙

算法思路:

模拟青蛙叫声,两种情况:

  • 只有连续的发出叫声才算成功。当遇到'r''o''a''k'这四个字符时,我们要去查看每个字符对应的前驱字符,有没有青蛙交出来。若有青蛙叫出来,那就让这个青蛙接下来喊出这个字符;若没有,返回 -1;
  • 因为要返回青蛙的最小个数,即同一青蛙可能叫多次。当遇到'c'字符时,我们需要查看'k'字符有没有青蛙叫出来,若有就让此青蛙继续去叫'c';若没有,就重新添加青蛙。
class Solution { public: int minNumberOfFrogs(string croakOfFrogs) { string s="croak"; int n=s.size(); vector<int> hash(n);//数组模拟哈希表 unordered_map<char,int> index;//[x,x] 表示这个字符的下标 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 i=index[ch]; if(hash[i-1]==0) return -1; hash[i-1]--;hash[i]++; } } for(int i=0;i<n-1;i++){ if(hash[i]!=0) return -1; } return hash[n-1]; } };

目录

  1. 相关题解
  2. 1.1替换所有的问号
  3. 2.2提莫攻击
  4. 2.3Z 字形变换
  5. 2.4外观数列
  6. 2.5数青蛙
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 2024 年 LLM 大模型学习路线:从入门到实战
  • Vivado AXI4-Stream 接口协议详解
  • Python 人工智能开发指南:从基础编程到智能应用
  • VSCode 与 PyCharm 配置 OpenCV 教程(Python 与 C++)
  • 基于 DeepSeek 和 Cursor 构建智能代码审查工具实践
  • Docker 基础:虚拟化原理与容器化实战
  • 科学机器学习中的物理信息神经网络:现状与展望
  • 摩尔投票法详解
  • AI 浪潮下的高管布局:技术如何提升效率与突破行业壁垒
  • ClawdBot 语音翻译:Whisper tiny 带口音英语与粤语 WER 对比
  • 自然语言处理在金融领域的应用与实战
  • OpenClaw 开源 AI Agent 框架技术解析与架构设计
  • 单 OpenClaw 配置多 Agent、多 QQ 与飞书机器人
  • AI 时代技术民主化:文科生为何成最大受益者
  • GitHub 编程初学者项目筛选指南与资源推荐
  • LightRAG:基于图结构索引的智能检索增强生成系统
  • AI 魔术师:基于视觉的增强现实特效
  • OpenClaw 多 Agent 与飞书机器人配置实战
  • AR/VR与边缘计算融合下的测试扩展策略
  • 无人机视觉语言导航:基本概念与问题定义

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online