优选算法——模拟


👇作者其它专栏

《数据结构与算法》《算法》《C++起始之路》


相关题解

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

算法思路:

模拟+分情况讨论。

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

        i.若差值大于等于中毒时间,说明上次中毒可以持续duration秒;

        ii.若差值小于中毒时间,说明此时发生了中毒叠加,那么上次的中毒只能持续两者的差值。

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。

第一行、第四行差为2row-2的等差数列;第二行、第三行除了第一个数取值为行数,每组下标为(2n-1,2n)的数围绕(2row-2)的倍数左右取值。

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

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]; } };

Read more

告别查重降 AIGC 双重焦虑!宏智树 AI:让论文兼具原创性与人工质感

告别查重降 AIGC 双重焦虑!宏智树 AI:让论文兼具原创性与人工质感

作为深耕论文写作科普的教育博主,后台每天都被两类求助刷屏:一类是 “查重率居高不下,改到崩溃还是超标”;另一类是 “用 AI 写的初稿查重率合格,却被 AIGC 检测揪出,判定学术不端风险”。 2025 年以来,高校学术审核全面升级,查重率 + AIGC 检测双管齐下,传统的 “同义词替换”“语序调换” 降重法彻底失效。而宏智树 AI的降重降 AIGC 功能,堪称学术审核的 “通关密钥”,凭借 “语义重构 + 人工质感注入” 的双重策略,让你的论文既能轻松通过查重,又能摆脱 AI 生成痕迹!宏智树 AI 官网www.hzsxueshu.com,微信公众号搜一搜 “宏智树 AI” 即可体验。 一、传统降重与 AI 写作的双重雷区,

By Ne0inhk
从零开始,手把手教你用开源技术搭建一个能“读懂“文档的智能问答系统(收藏版)

从零开始,手把手教你用开源技术搭建一个能“读懂“文档的智能问答系统(收藏版)

从零开始,用开源技术搭建一个能"读懂"文档的智能问答系统 今天给大家分享一个非常实用的项目——Everything plus RAG 智能文档问答系统。 相信大家的电脑上都安装了 Everything,一个磁盘文件快速查找桌面级应用软件。 一直以来,我都有个想法,能否做一个 plus 版本,支持文档的全文检索和智能问答?!这个想法萌芽已久,且和同事、朋友做过多次讨论。 近期,终于腾出空来,把它实现了。 直接上效果视频。 这个系统解决了我们工作中一个常见的痛点——如何从海量文档中快速找到最准确答案? unsetunset一、为什么需要这样一个系统?unsetunset 先说说我遇到的问题。作为技术人,手头总有大量的文档: * 技术文档、API 手册堆积如山 * 项目笔记、会议记录散落各处 * 代码文件、配置文件数不胜数 传统的解决方案有两种: 方案一:全文搜索(如 Elasticsearch、国产化[Easysearch] 等)

By Ne0inhk
WSL2+Gitee代码管理实战指南

WSL2+Gitee代码管理实战指南

Git + Gitee + WSL2 代码管理 基础环境配置(Ubuntu/Debian 发行版选择) 根据自己的需求,选择自己熟悉的且稳定的发行版即可 我这里选用Ubuntu18.04LTS WSL2 中 Git 的安装与初始化设置 先查看WSL2中是否有git(我这里是Ubuntu18.04,比较老,是配合jetson nano 使用的) 输出如下格式就是有 没有的话就直接apt安装即可 然后设置GIT使用的邮箱和用户名 全局配置(SSH 公钥生成) 公钥生成         在本地生成公钥并上传到Gitee中,首先检查是否有SSH公钥,若有则复制使用,没有则创建新密钥。我这里就没有密钥,需要创建新公钥,后面会有三次提示,1-公钥文件保存路径(直接回车为默认路径,推荐)2- 密码短语,需要更高安全性可填,否则留空即可 3- 确认密码短语 ssh-keygen -t rsa -b

By Ne0inhk

FaceFusion开源换脸工具详解:支持高清视频与唇形同步

FaceFusion开源换脸工具详解:支持高清视频与唇形同步 在AI视觉技术飞速发展的今天,人脸替换早已不再是科幻电影中的特效专利。从短视频平台的趣味变脸,到影视后期中对演员形象的修复与重构,深度学习驱动的人脸合成工具正以前所未有的真实感和易用性走入大众视野。 其中,FaceFusion 作为当前最受欢迎的开源换脸项目之一,凭借其模块化架构、高保真输出和强大的扩展能力,成为众多创作者和技术爱好者的首选。它不仅实现了精准的人脸映射,更集成了面部增强、遮罩优化、音频驱动唇动等高级功能,真正将“换脸”从简单的图像叠加,推向了可应用于专业场景的成熟技术路径。 最新发布的 FaceFusion 3.1.x 版本 在性能与稳定性上进一步升级,全面支持4K视频处理,并显著提升了唇形同步的自然度。无论是为外语影片配音后自动匹配口型,还是构建AI数字人播报系统,这套工具链都展现出了极强的实用潜力。 项目地址:https://github.com/facefusion/facefusion 中文整合包 & 视频教程:ZEEKLOG 博客 | 换脸全流程指南 为什么是 FaceFusion?

By Ne0inhk