【基础算法总结】模拟算法

模拟算法

  • 1.替换所有的问号
  • 2.提莫攻击
  • 3.Z 字形变换
  • 4.外观数列
  • 5.数青蛙

在这里插入图片描述

点赞👍👍收藏🌟🌟关注💖💖
你的支持是对我最大的鼓励,我们一起努力吧!😃😃

模拟算法 —> 比葫芦画瓢
在模拟这一类题里面,题目已经告诉了这些题应该怎么做,所有我们接下来做的是把题目中的过程转换成代码解决这个问题。

这个算法特点:思路比较简单,考察的是代码能力。
这就决定了,

  1. 一定要模拟算法流程(一定要在演草纸上过一遍流程,注意细节!)
  2. 把流程转化成代码

1.替换所有的问号

题目链接:1576. 替换所有的问号

题目描述:

在这里插入图片描述
在这里插入图片描述
算法原理:
在这里插入图片描述

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 || s[i-1] != ch) && (i==n-1 || s[i+1] != ch)){s[i]=ch;break;}}}}return s;}
};

2.提莫攻击

题目链接:495. 提莫攻击

题目分析:

在这里插入图片描述
当在t秒中毒,持续时间为 [t,t+duration-1]
在这里插入图片描述
算法原理:

首先我们发现一个规律
在这里插入图片描述

在这里插入图片描述

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 字形变换

题目链接:6. Z 字形变换

题目分析:

在这里插入图片描述
给你一个字符串,它按照Z字形排列后,然后从左往右输出按照N字形排列之后的字符串。

在这里插入图片描述
算法原理:

解法一:模拟

题目要求怎么做就模拟一下,首先开辟一个n行,然后字符串长度的列的二维数组。这样能保证把所有字符都能放进去。

但是时间复杂度和空间复杂度都是O(len*n)
在这里插入图片描述
想一想能不能进行优化。

模拟题的优化方式都是在模拟的基础上找规律

解法二:找规律

上面是把字符填到数组里,现在我把下标填进去
在这里插入图片描述
第一行从0跳到6然后在跳到12,我们发现它的间隔是一样的,这里的间隔公差设为d,d=6。也就是说我们直接把下标0位置弄完,然后在找下标6的位置等等,就可以把第一行字符全部找完,就不用在弄一个数组然后把字符填上去了。

公差d应该怎么计算呢,我们发现 d=2*n-2

最后一行从下标n-1开始,n-1+d,n-1+2d,下标一定是要小于字符串长度的。

在这里插入图片描述

第一行和最后一行我们解决了,剩下就是中间行了

我们发现中间行公差其实也是6,但是如果一个一个算比如1+6=7,7+6=13,然后还要回头在来算5+6=11。我们其实可以两个下标一起计算
在这里插入图片描述

上面d=2*n-2有可能不是所有情况都适应,我们再举个例子
发现这个公差公式也是正确的。
在这里插入图片描述

但是一定要注意n=1的情况,那就只有一行,如果按照上面找的规律就会死循环,此时原本的字符串就是最终答案,因此特殊处理一下

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

4.外观数列

题目链接:38. 外观数列

题目分析:

在这里插入图片描述
这道题具体意思是,给你一个n返回到n的时候这个数的变化。

在这里插入图片描述

算法原理:

解法:模拟+双指针

在这里插入图片描述

class Solution {
public:string countAndSay(int n) {string ret="1";for(int i=1;i<n;++i){int left=0,right=0;string tmp;while(right<=ret.size()){if(ret[right] != ret[left]){tmp+=to_string(right-left);tmp+=ret[left];left=right;}++right;}ret=tmp;}return ret;}
};

5.数青蛙

题目链接:1419. 数青蛙

题目分析:

在这里插入图片描述

给一个字符串,这个字符串是蛙鸣的组合,让找到这个字符串中蛙鸣所需最少青蛙的个数。
在这里插入图片描述

算法原理:

解法:模拟

如果从前往后找蛙鸣太难了,情况太复杂。
在这里插入图片描述
我们可以考虑如果到r前面一定要有c,到o前面一定要有r等等,我们要找一个字符的前缀。判断字符串在不在我们一般用哈希表

下面是三种情况

在这里插入图片描述
总结一下:
r,o,a,k
找一下前驱字符,是否在哈希表中存在

  1. 存在:前缀个数- -,当前字符++
  2. 不存在:返回-1

c 找最后一个字符,是否在哈希表中存在
3. 存在:最后一个字符- -,当前字符++
4. 不存在:当前字符++

class Solution {
public:int minNumberOfFrogs(string croakOfFrogs) {string str="croak";int n=str.size();vector<int> hash(n); //用数组来模拟哈希表unordered_map<char,int> index; //[x,x这个字符的下标]for(int i=0;i<n;++i)index[str[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];}
};

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

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

相关文章

笔记理财投资

当制定一个具体的理财计划时&#xff0c;可以参考以下步骤和内容&#xff1a; 设定理财目标 短期目标&#xff08;如1-3年&#xff09;&#xff1a;储蓄一笔紧急备用金&#xff0c;或者为某个短期旅行、购买特定物品等存钱。 中期目标&#xff08;如3-10年&#xff09;&#x…

Python魔法之旅-魔法方法(10)

目录 一、概述 1、定义 2、作用 二、应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类型检…

Swift 并发

并发 一、定义和调用异步函数二、异步序列三、并行的调用异步方法四、任务和任务组1、非结构化并发2、任务取消 五、Actors Swift 对于结构化的编写异步和并行代码有着原生的支持。异步代码可以被挂起并在之后继续执行&#xff0c;同一时间只能有一段代码被执行。代码支持挂起和…

SpringMVC:获取请求数据

1. 通过RequestParma注解接收 /**** value和name都可以使用&#xff0c;互为别名* 如果此处设置了需要什么参数而前端请求时没有提供则会报400&#xff08;请求参数不一致错误&#xff09;* required参数用于设置该参数是否为必须传递参数&#xff0c;默认为true必须传递* defa…

HTML5 新的语义化标签

CSS3 和 HTML5 引入了大量新特性&#xff0c;为前端开发提供了更多功能和更好的语义化支持。这本教程将详细介绍 CSS3 新语法和技巧&#xff0c;以及 HTML5 新的语义化标签元素&#xff0c;如 <header>、<footer>、<section>、<article>、<nav> …

07.与jenkins集成实现cicd

7.与jenkins集成实现ci/cd ip地址服务内存192.168.111.11kube-apiserver 80801G192.168.111.13k8s-node22G192.168.111.14jenkins(tomcat jdk) 8080 kubelet docker1G192.168.111.15gitlab 8080,80 docker2G 通过jenkins一键操作实现发布服务&#xff0c;jenkins对接k8s …

5年级小孩学编程:开启智慧之旅,探索未来无限可能

5年级小孩学编程&#xff1a;开启智慧之旅&#xff0c;探索未来无限可能 在科技日新月异的今天&#xff0c;编程已经逐渐渗透到我们生活的方方面面。那么&#xff0c;对于五年级的小孩来说&#xff0c;学习编程究竟意味着什么呢&#xff1f;本文将从四个方面、五个方面、六个方…

MySQL学习——从命令行调用MySQL 程序

从命令行&#xff08;即你的 shell 或命令提示符&#xff09;调用 MySQL 程序时&#xff0c;你需要输入程序名&#xff0c;后跟任何选项或其他参数&#xff0c;以指示程序你想要它执行什么操作。以下是一些示例程序调用的命令。 在这些示例中&#xff0c;$> 表示你的命令解…

简单的小波自编码器降噪(Python)

代码很简单&#xff0c;很容易读懂。 import kerasfrom keras import layersfrom keras.datasets import mnistimport numpy as npimport matplotlib.pyplot as pltimport pywtimport tensorflow as tfimport torch#加载经典的mnist手写数字图像(x_train, _), (x_test, _) mn…

基于Chisel的FPGA流水灯设计

Chisel流水灯 一、Chisel&#xff08;一&#xff09;什么是Chisel&#xff08;二&#xff09;Chisel能做什么&#xff08;三&#xff09;Chisel的使用&#xff08;四&#xff09;Chisel的优缺点1.优点2.缺点 二、流水灯设计 一、Chisel &#xff08;一&#xff09;什么是Chise…

uniapp 怎么设置凸起的底部tabbar

1. uniapp 怎么设置凸起的底部tabbar 1.1. 方案一系统提供 1.1.1. 使用uniapp官方提供的属性midButton 使用时&#xff0c;list数组须为偶数 &#xff08;1&#xff09;pages.json "tabBar": {"custom": true,"color": "#8F8F94",&q…

C语言 入门例子和代码学习

下面提供一些C语言的入门示例代码&#xff0c;并附有注释&#xff0c;以帮助理解每个部分的功能。 1. Hello World程序 #include <stdio.h> // 引入标准输入输出库 int main() { // 主函数的开始 printf("Hello, World!\n"); // 打印 "Hello, Wo…

HTML的标签(标题、段落、文本、图片、列表)

HTML的标签1 标题标签&#xff1a;段落标签&#xff1a;文本标签&#xff1a;图片标签:列表标签&#xff1a;有序列表&#xff1a;无序列表&#xff1a;定义列表&#xff1a;列表案例&#xff1a; 标题标签&#xff1a; 标签&#xff1a;h1~h6 注意&#xff1a;如果使用无效标…

运维相关知识

一、运维需要关注 服务器的哪些数据&#xff1f; 1. CPU 1.1 CPU使用率&#xff1a; top&#xff0c;vmstat (1) 用户CPU使用率&#xff1a;用户态程序的使用率。top 命令 us 字段和 nice字段 (低优先级) (2) 系统CPU使用率&#xff1a;内核态程序的使用率。top 命令 sy 字…

【前端每日基础】day32——节流和防抖

节流&#xff08;Throttle&#xff09;和防抖&#xff08;Debounce&#xff09;是两个在前端开发中常用的技术&#xff0c;它们用于控制某些函数的执行频率&#xff0c;以提升性能和用户体验。虽然两者的目标相似&#xff0c;但实现方式和适用场景有所不同。 一、节流&#xf…

【安规介绍】

文章目录 一、基础知识安规上的六类危险的防护&#xff1a;安全电压漏电流接触电流能量问题&#xff1a;火灾问题&#xff1a;热问题结构问题阻燃等级绝缘等级&#xff1a;对接地系统的要求&#xff1a;结构要求:电气要求&#xff1a; 二、设计的关键电气绝缘距离电气爬电距离:…

Python 关于加密和解密

1、理解 加密是通过使用各种加密算法来对数据进行加密和解密的过程。Python 提供了许多内置库和第三方库&#xff0c;可以用于实现各种加密算法和技术&#xff0c;包括对称加密、非对称加密、哈希函数等。以下是 Python 中常用的一些加密相关的库和模块&#xff1a; hashlib …

Python知识点14---被规定的资源

提前说一点&#xff1a;如果你是专注于Python开发&#xff0c;那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了&#xff0c;而如果你和作者一样只是操作其他技术的Python API那就足够了。 在Python中被规定的东西不止有常识中的那些关键字、构造器等编程语言…

Python知识点4---循环语句

提前说一点&#xff1a;如果你是专注于Python开发&#xff0c;那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了&#xff0c;而如果你和作者一样只是操作其他技术的Python API那就足够了。 Python支持两种循环for和while&#xff0c;但是他们和其他的语言有些…

乡村振兴与农村环境整治:加强农村环境治理,改善农村人居环境,打造干净整洁、生态宜居的美丽乡村

目录 一、引言 二、农村环境整治的重要性 1、提升农民生活质量 2、促进农村经济发展 3、保护农村生态环境 三、当前农村环境面临的问题 1、垃圾处理不当 2、污水处理设施缺乏 3、农业面源污染严重 四、加强农村环境治理的措施 1、完善农村垃圾处理体系 2、加强农村…