算法:模拟思想算法

这篇具有很好参考价值的文章主要介绍了算法:模拟思想算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇总结的是模拟算法

实现原理

模拟算法的实现原理很简单,就是依据题意实现题意的目的即可,考察的是你能不能实现题目题意的代码能力

算法思路

没有很明显的算法思路,就是根据题意完成目标即可

优化

任何算法都是会有一定的优化空间的,那么在所有模拟的题型中,大多数的题目都是通过找规律来解决问题的,通过找规律可以避免掉很多繁琐的步骤

典型例题

替换所有问号

算法:模拟思想算法,C++,# 算法,习题集,c++

正如前面的算法原理所说,模拟的算法就是实现题目意思,以此题为例,和题目意思相同,就是替换所有问号即可

class Solution 
{
public:
    string modifyString(string s) 
    {
        int n=s.size();
        if(n==1)
        {
            return "a";
        }
        if(s[0]=='?')
        {
            for(int i='a';i<='z';i++)
            {
                if(i!=s[1])
                {
                    s[0]=i;
                    break;
                }
            }
        }
        if(s[n-1]=='?')
        {
            for(int i='a';i<='z';i++)
            {
                if(i!=s[n-2])
                {
                    s[n-1]=i;
                    break;
                }
            }
        }
        for(int i=0;i<n;i++)
        {
            if(s[i]=='?')
            {
                for(int j='a';j<='z';j++)
                {
                    if(j!=s[i-1] && j!=s[i+1])
                    {
                        s[i]=j;
                        break;
                    }
                }
            }
        }
        return s;
    }
};

提莫攻击

算法:模拟思想算法,C++,# 算法,习题集,c++

题意也相当简单,直接根据题意模拟即可~

class Solution 
{
public:
    int findPoisonedDuration(vector<int>& timeSeries, int duration) 
    {
        int sum=0;
        for(int i=0;i<timeSeries.size()-1;i++)
        {
            if(timeSeries[i]+duration<=timeSeries[i+1])
            {
                sum+=duration;
            }
            else
            {
                sum+=timeSeries[i+1]-timeSeries[i];
            }
        }
        sum+=duration;
        return sum;
    }
};

N字型变换

算法:模拟思想算法,C++,# 算法,习题集,c++

这里展示的是直接使用模拟算法的情况下,可以通过这样的方法进行解决

对于此题来说,还可以通过找规律的方法解决

class Solution 
{
public:
    string convert(string s, int numRows)
    {
        int p=1000;
        string ans;
        vector<vector<char>> v(numRows, vector <char>(p));
        int k = 0;
        int i = 0;
        while (k < s.size())
        {
            for (int j = 0; j < numRows && k < s.size(); j++)
            {
                v[j][i] = s[k++];
            }
            for (int m = numRows - 2; m > 0 && k < s.size(); m--)
            {
                v[m][++i] = s[k++];
            }
            i++;
        }
        for (int i = 0; i < numRows; i++)
        {
            for (int j = 0; j < p; j++)
            {
                if (v[i][j] != 0)
                {
                    ans.push_back(v[i][j]);
                }
            }
        }
        return ans;
    }
};

找规律

算法:模拟思想算法,C++,# 算法,习题集,c++
如果按下标的形式进行填充,此时再进行观察就会发现是相对容易的

第一行和最后一行每次需要找的数其实是有固定的公差的,而中间部分也有固定规律,因此在写返回的字符串的时候,就可以使用这个原理,分成三部分,先填第一行,再填中间部分,再填最后一行,这样三个模块都填写完毕后字符串也就形成了

外观序列

算法:模拟思想算法,C++,# 算法,习题集,c++

此题也是很经典的模拟题,直接根据题意总结即可,强行模拟就可通过,借助一个双指针可以更方便的寻找规律

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

总结

模拟算法和前面相比,实际上不需要过多的算法思维,只需要强行根据题意写出代码即可,但是需要一定的代码能力,如果有代码能力,原照原根据题意进行复刻即可,总体来说还是相对简单的一套算法文章来源地址https://www.toymoban.com/news/detail-683744.html

到了这里,关于算法:模拟思想算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《网络安全基础》——习题集

    一、 选择题: 1、TCP/IP 体系结构中的TCP 和IP 所提供的服务分别为() A.链路层服务和网络层服务 B.网络层服务和传输层服务 C.传输层服务和应用层服务 D.传输层服务和网络层服务 2、下列哪个攻击不在网络层() A.IP 欺诈 B. Teardrop C. Smurf  D. SQL 注入 3、ARP 协议是将 __ 地址转换成

    2024年02月08日
    浏览(38)
  • leetcode习题集【8月】

    617. 合并二叉树 700. 二叉搜索树中的搜索 236. 二叉树的最近公共祖先 701. 二叉搜索树中的插入操作 108. 将有序数组转换为二叉搜索树 538. 把二叉搜索树转换为累加树

    2024年02月11日
    浏览(45)
  • PTA SQL部分练习题集

    10-1 找出所有姓“李”的学生姓名、民族和联系电话。 10-2 查询选修了2门以上课程的学生学号和平均成绩。 10-3 统计每种商品的销售数量 10-4 查询前3门课程的课号及课程名称 10-5 查询名字中含有“明”字的男生的学生姓名和班级 10-6 查询姓名是两个字的学生信息 10-7 计算“

    2023年04月14日
    浏览(81)
  • 【LeetCode】练习习题集【4月 - 7 月】

    1.重复数 题目: 代码: 9.回文数 题目: 思路: 如果是负数一定不是回文数 直接返回false 如果是正数,则将其倒序数值计算出来,然后比较和原数值是否相等 如果是回文数相等返回true 不相等返回false 代码: 13. 罗马数字转整数 (https://leetcode.cn/problems/roman-to-integer/) 题目:

    2024年02月13日
    浏览(42)
  • hadoop大数据原理与应用-----初识hadoop习题集

    Hadoop的配置文件主要是`hadoop-env.sh`和`yarn-env.sh`,这两个文件位于Hadoop安装目录的`etc/hadoop`目录下。 1. `hadoop-env.sh`:在这个文件中,您可以配置Hadoop的环境变量,包括JAVA_HOME。通常,在这个文件中会有一个关于JAVA_HOME的配置项,您可以直接修改这个配置项来指定Java的安装路径

    2024年04月26日
    浏览(39)
  • Android移动开发技术(慕课版)习题集题库及答案

    一 、 填空题 1.在Android开发环境中,SDK组件的作用是用于(   开发    )Android应用。 2.在Android开发环境中,(   Dalvik    )组件的作用是虚拟机管理。 二、判断题 1.电子邮件客户端属于Android平台体系结构的应用程序框架层。(  F  ) 2.Android 中使用AVD Manager工

    2024年02月10日
    浏览(57)
  • 信息学竞赛中的数学 习题集 461-470(10题)

    3279:【例46.1】 完全数 信息学奥赛一本通-编程启蒙(C++版)在线评测系统 3280:【例46.2】 数字统计 信息学奥赛一本通-编程启蒙(C++版)在线评测系统 3281:【例46.3】 素数回文数的个数 信息学奥赛一本通-编程启蒙(C++版)在线评测系统 3282:练46.1 求π的值 信息学奥赛一本

    2024年01月23日
    浏览(46)
  • 【Python习题集4】字符串与正则表达式

    1.输人一个字符串,将该字符串中下标为偶数的字符组成新串并通过字符串格式化方式显示。 (1)源代码 (2)运行结果截图 2.编写程序,生成一个由15个不重复的大小写字母组成的列表。 (1)源代码 (2)运行结果截图 3.给定字符串\\\"site sea suede sweet see kase sse sseeloses\\\",匹配出所有以

    2024年02月02日
    浏览(85)
  • 【Python习题集7】Python对CSV文件数据进行可视化

    1、datal.csv中的B、C、D和E列数据分别是日期、权重、A企业的销售额、B企业的销售额。读取C、D、E列数据,并统计E列数据的算术平均数、加权平均值(权值为C列数据)、方差、中位数、最小值、最大值。并绘制E列数据的直方图。 (1)源代码: (2)运行结果截图 : 2、读取da

    2024年02月06日
    浏览(52)
  • 拓扑排序 (算法思想+图解+模板+练习题)

    有向无环图一定是拓扑序列,有向有环图一定不是拓扑序列。 无向图没有拓扑序列。 首先我们先来解释一下什么是有向无环图: 有向就是我们两个结点之间的边是有方向的,无环的意思就是整个序列中没有几个结点通过边形成一个圆环。 下图就是一个有向无环图,它也一定

    2024年02月03日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包