【优选算法篇】:模拟算法的力量--解决复杂问题的新视角

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨
✨ 个人主页:余辉zmh–CSDN博客
✨ 文章所属专栏:优选算法篇–CSDN博客

在这里插入图片描述

文章目录

  • 一.模拟算法
  • 二.例题
    • 1.替换所有的问号
    • 2.提莫攻击
    • 3.外观数列
    • 4.Z字形变换
    • 5.数青蛙

一.模拟算法

模拟算法是通过计算机程序模仿现实世界中的系统或过程的方法。它首先根据要模拟的对象建立数学模型或逻辑模型,然后设置初始状态,并按照设定的规则和逻辑逐步推进模拟过程。模拟可以关注离散事件的发生和处理(如交通流量模拟),也可以模拟随时间连续变化的系统(如化学反应模拟)。模拟算法在科学研究、工程领域、商业和经济等多个领域有广泛应用,如预测交通拥堵、模拟城市发展和游戏开发中的物理运动等。通过模拟,我们可以对系统的行为进行分析,为决策提供依据。

简单的来说,其实就是根据题中要求模拟实现整个过程,通常会借助其他的算法来加以解决,下面通过几道例题来讲解什么是模拟算法。

二.例题

1.替换所有的问号

题目

在这里插入图片描述

算法原理

本道题比较简单,直接根据提议要求模拟实现即可。

第一层for循环表示遍历整个字符串,第二个for循环表示遇到要替换的问号是,从字符a开始,一直到字符z,选择一个符合要求的替换问号。相邻的两个字符不能重复。

代码实现

string modifyString(string s){for (int i = 0; i < s.size();i++){if(s[i]=='?'){for (char ch = 'a'; ch < 'z';ch++){if((i==0||s[i-1]!=ch)&&(i==s.size()-1||s[i+1]!=ch)){s[i] = ch;break;}}}}return s;
}

2.提莫攻击

题目

在这里插入图片描述

算法原理

本道题模拟实现也比较简单,具体过程就是,直接计算数组中的前后两个元素的差值,如果差值大于等于中毒时间,说明是先过了整个中毒时间之后再中下一次毒;如果差值小于中毒时间,说明上一次的中毒时间还没有过完,就从新更新中毒时间,这里的差值就是中毒时间。

依次计算每一个差值然后累加,这里有一个注意点,就是最后一个元素因为没有办法计算差值,所以在最后返回结果时要再多加一个中毒时间,因为最后一次是完整的一个中毒时间。

代码实现

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.外观数列

题目

在这里插入图片描述

算法原理

在这里插入图片描述

代码实现

string countAndSay(int n){string ret = "1";string tmp;//循环次数是n-1次for (int i = 1; i < n;i++){//双指针找到相同的子串for (int left = 0, right = 0; right < ret.size();){while(right<ret.size()&&ret[left]==ret[right]){right++;}//先插入相同字串的长度tmp += to_string(right - left);//再插入数字tmp += ret[left];//更新左指针left = right;}ret = tmp;tmp.clear();}return ret;
}

4.Z字形变换

题目

在这里插入图片描述

算法原理

虽然题目中说是Z字形变换,但实际上更像是N字形变换,建议直接看成N字形

在这里插入图片描述

代码实现

string convert(string s, int numRows){if(numRows==1){return s;}string ret;int k = 0;int d = 2 * numRows - 2;//第一行while(k*d<s.size()){ret += s[0 + k * d];k++;}//中间行int i = 1;while(i<=numRows-2){k = 0;int j = d - i;while(i+k*d<s.size()||j+k*d<s.size()){ret += s[i + k * d];if(j+k*d<s.size()){ret += s[j + k * d];}k++;}i++;}//最后一行k = 0;while(numRows-1+k*d<s.size()){ret += s[numRows - 1 + k * d];k++;}return ret;
}

5.数青蛙

题目

在这里插入图片描述

算法原理

在这里插入图片描述

代码实现

int minNumberOfFrogs(string croakOfFrogs){string s="croak";unordered_map<char, pair<int,int>> hash;//将字符串croak中的每个字符存放到哈希表中,其中要建立映射关系,每个字符存放上一个的字符的下标以及个数//注意第一个字符存放的是最后一个字符的下标for (int i = 0; i < s.size();i++){if(i==0){hash[s[i]].first = s.size() - 1;}else{hash[s[i]].first = i - 1;}}for (auto ch : croakOfFrogs){if(hash[s[hash[ch].first]].second){hash[s[hash[ch].first]].second--;hash[ch].second++;}else{if(ch=='c'){hash[ch].second++;}else{return -1;}}}//最后遍历整个哈希表,除了最后一个,如果出现非零元素,直接返回-1for (int i = 0;i<s.size()-1;i++){if(hash[s[i]].second){return -1;}}//返回哈希表中最后一个字符的个数return hash[s[s.size() - 1]].second;
}

以上就是关于模拟算法的讲解,如果哪里有错的话,可以在评论区指正,也欢迎大家一起讨论学习,如果对你的学习有帮助的话,点点赞关注支持一下吧!!!
在这里插入图片描述

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

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

相关文章

2_CSS3 背景 --[CSS3 进阶之路]

CSS3 中的背景属性提供了许多强大的功能来增强网页设计&#xff0c;包括但不限于多背景图像、渐变、背景大小控制等。以下是一些关键的 CSS3 背景属性及其用法示例。 1. 多重背景图像 CSS3 允许你为一个元素设置多个背景图像。这些图像按照它们在 background-image 属性中定义…

数据处理之计算文本相似度|余弦相似度|欧氏距离

计算文本相似度是自然语言处理中的一个重要任务&#xff0c;用于评估两个或多个文本之间的相似程度。以下是几种常用的方法及其背后的实现机制&#xff1a; 基于词频的方法(重点) 余弦相似度 (Cosine Similarity)&#xff1a;将文档表示为词频向量&#xff08;如使用词袋模型…

精通SCP命令:安全高效地进行文件传输

精通SCP命令&#xff1a;安全高效地进行文件传输 SCP&#xff08;Secure Copy Protocol&#xff09;命令是一个基于SSH协议的命令行工具&#xff0c;用于在本地系统和远程系统之间安全地复制文件和目录。以下是SCP命令的详细用法&#xff1a; 基本语法 scp [选项] [源文件或…

Word 转成pdf及打印的开源方案支持xp

Word转成pdf、打印的方案几乎没有免费开源的方案&#xff0c;现在提供一个通过LibreOffice实现的方案 操作依赖LibreOffice需要安装&#xff0c;点此下载老版本 5.4.7.2是最后一个支持xp的 版本如需xp要请安装此版本 LibreOffice官方介绍 LibreOffice 是一款开放源代码的自…

蓝桥杯备考:数据结构之栈 和 stack

目录 栈的概念以及栈的实现 STL 的stack 栈和stack的算法题 栈的模板题 栈的算法题之有效的括号 验证栈序列 后缀表达式 括号匹配 栈的概念以及栈的实现 栈是一种只允许在一端进行插入和删除的线性表 空栈&#xff1a;没有任何元素 入栈&#xff1a;插入元素消息 出…

C++中的条件变量(condition_variable)详解:小白版

在编程中&#xff0c;我们经常需要处理多个任务&#xff0c;这些任务可能需要同时运行&#xff0c;也可能需要按照一定的顺序运行。这就涉及到了线程的概念。线程就像是一个小程序&#xff0c;它可以在程序中独立运行&#xff0c;而且可以和其他线程并行执行。 但是&#xff0…

【python】OpenCV—Local Translation Warps

文章目录 1、功能描述2、原理分析3、代码实现4、效果展示5、完整代码6、参考 1、功能描述 利用液化效果实现瘦脸美颜 交互式的液化效果原理来自 Gustafsson A. Interactive image warping[D]. , 1993. 2、原理分析 上面描述很清晰了&#xff0c;鼠标初始在 C&#xff0c;也即…

STM32标准库学习笔记(十)SPI

前言 学习永无止境&#xff01;本篇是嵌入式开发之片上外设SPI&#xff0c;了解基本硬件原理以及通信协议。 注&#xff1a;本文章为学习笔记&#xff0c;部分图片与文字来源于网络/江协科技课程/手册&#xff0c;如侵权请联系&#xff01;谢谢&#xff01; 一、SPI通信概述 1.…

探索 C++ 与 LibUSB:开启 USB 设备交互的奇幻之旅

一、引言 在当今数字化时代&#xff0c;USB&#xff08;通用串行总线&#xff09;设备无处不在&#xff0c;从常见的 U 盘、鼠标、键盘&#xff0c;到复杂的工业数据采集设备、医疗监测仪器等&#xff0c;它们以方便快捷的插拔式连接&#xff0c;为人们的生活和工作带来了极大…

LeetCode 209 题:长度最小的子数组

LeetCode 209 题&#xff1a;长度最小的子数组 (Minimum Size Subarray Sum) LeetCode 第209题要求给定一个正整数数组 nums 和一个正整数 target&#xff0c;找出具有最小长度的连续子数组&#xff0c;使得子数组的和大于或等于 target。如果不存在这样的子数组&#xff0c;返…

从github上,下载的android项目,从0-1进行编译运行-踩坑精力,如何进行部署

因为国内的网络原因&#xff0c;一直在anroidstudio开发的问题上&#xff0c;是个每个开发者都会踩坑 一直以为是自己的原因&#xff0c;其实很多都是国内网络的原因&#xff0c;今天就从一个开发者的视角 把从github上一个陌生的项目&#xff0c;如何通过本地就行运行的 首先…

计算机网络 (40)域名系统DNS

前言 计算机网络域名系统DNS&#xff08;Domain Name System&#xff09;是互联网的基础技术之一&#xff0c;它负责将人类可读的域名转换为计算机用来通信的数字IP地址。 一、基本概念 DNS的主要目的是将域名解析或翻译为IP地址&#xff0c;使得用户可以通过简单易记的域名来访…

使用Dify创建个问卷调查的工作流

为啥要使用Dify创建工作流呢&#xff1f;一个基于流程的智能体的实现&#xff0c;特别是基于业务的实现&#xff0c;使用Dify去实现时&#xff0c;通常都是一个对话工作流&#xff0c;当设计到相对复杂一些的流程时&#xff0c;如果将所有逻辑都放在对话工作流中去实现&#xf…

toRef 和 toRefs 详解及应用

在 Vue 3 中&#xff0c;toRef 和 toRefs 是两个用于创建响应式引用的工具&#xff0c;主要用于组合式 API&#xff08;Composition API&#xff09;的场景中 1. toRef 定义 toRef 将某个对象的某个属性包装成一个响应式引用。这样可以直接对该引用进行操作&#xff0c;而不需…

八 rk3568 android11 AP6256 蓝牙调试

一 经典蓝牙 经典蓝牙默认可以工作, 验证可以连接 蓝牙鼠标,键盘, 连接手机等等, 在 系统设置里打开蓝牙 ,扫描设备,配对连接即可。 注: 连接 ANDROID 手机的坑 1 手机连接之后空闲状态会断开 ,变成 配对的设备不是已连接,是正常,使用时又会自动 连接 2 手机传…

解读若依微服务架构图:架构总览、核心模块解析、消息与任务处理、数据存储与缓存、监控与日志

文章目录 1. 引言2. 架构总览3. 核心模块解析3.1 服务注册与配置中心Nacos&#xff1a;微服务的中枢 3.2 网关层ruoyi-gateway&#xff1a;服务的统一入口 3.3 核心业务服务3.4 认证服务ruoyi-auth&#xff1a;认证与授权的守护者 3.5 异构服务整合Sidecar&#xff1a;连接异构…

【MySQL】基础架构分析

考察频率难度40%⭐⭐⭐⭐ 这道题在面试时的出现频率其实并不高&#xff0c;最起码对于笔者来说是没有遇到过。那为什么还是选择把这个问题作为 MySQL 八股文系列的第一个呢&#xff1f;其实原因也挺简单的&#xff0c;还是老规矩&#xff0c;先通过一个问题把整个知识框架来一…

【已解决】【记录】2AI大模型web UI使用tips 本地

docker desktop使用 互动 如果需要发送网页链接&#xff0c;就在链接上加上【#】号 如果要上传文件就点击这个➕号 中文回复 命令它只用中文回复&#xff0c;在右上角打开【对话高级设置】 输入提示词&#xff08;提示词使用英文会更好&#xff09; Must reply to the us…

热烈祝贺“钛然科技”选择使用订单日记

感谢珠海钛然科技有限公司选择使用订单日记&#xff01; 珠海钛然科技有限公司&#xff0c;成立于2020年&#xff0c;位于广东省珠海市高新区&#xff0c;是一家以从事研发和生产功能型纳米高分子涂层为主的企业。 在业务不断壮大的过程中&#xff0c;想使用一种既能提升运营…

关于H5复制ios没有效果

问题场景&#xff1a;今天遇到这样一个问题&#xff0c;需要从后端接口获取到的值进行复制&#xff0c;且不能提现调用获取值&#xff0c;因为是一个数据列表&#xff0c;每个列表元素需要当场点击调用接口获取值进行复制&#xff0c;本来以为很简单的一个需求&#xff0c;当做…