算法:模拟思想算法

2023-10-27

本篇总结的是模拟算法

实现原理

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

算法思路

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

优化

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

典型例题

替换所有问号

在这里插入图片描述

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

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

提莫攻击

在这里插入图片描述

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

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

在这里插入图片描述

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

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

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

找规律

在这里插入图片描述
如果按下标的形式进行填充,此时再进行观察就会发现是相对容易的

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

外观序列

在这里插入图片描述

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

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

总结

模拟算法和前面相比,实际上不需要过多的算法思维,只需要强行根据题意写出代码即可,但是需要一定的代码能力,如果有代码能力,原照原根据题意进行复刻即可,总体来说还是相对简单的一套算法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法:模拟思想算法 的相关文章

  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • Springboot参数校验和异常处理

    Springboot参数校验和异常处理 参数校验 异常处理 参数校验 pom xml文件添加依赖
  • 2022年4月8日字节跳动机抖音APP推荐实习面试题

    1 AUC是什么 如何计算AUC AUC 随机取一个正样本和一个负样本 正样本的预测值大于负样本预测值的概率 AUC计算的关键是找到所有正样本预测值大于负样本预测值的正负样本对 首先 需要将样本按照预测值进行从小到大排序 最小score对应
  • 爬虫技术和爬虫需求现状和展望

    技术社区中流行的爬虫技术相当多 很多人喜欢基于Python的 也有人喜欢用C 很多人由于系统集成开发和跨平台的需要倾向于java 我就属于后者 其实就原理来说 爬虫组件都是差不多的 无头浏览器 最能够说明爬虫的特性 它们被设计创造出来 大部
  • ACE_Message_Block功能简介

    ACE Message Block在Ace中用来表示消息的存放空间 可用做网络通信中的消息缓冲区 使用非常频繁 下面将在如下方简单的介绍一下ACE Message Block相关功能 创建消息块 释放消息块 从消息块中读写数据 数据的拷贝
  • Linux下设置归档路径不生效,缺少log_archive_config导致归档路径被禁用

    10g的DATA GUARD的一个主要特点就是引入了log archive config参数 如果缺少这个参数 可能会导致归档路径被禁用 看别人建立DATA GUARD时碰到了这个问题 当时觉得比较有意思 于是特意重现一下 当前是一个已经配
  • spring boot中动态增加数据源并且通过sharding-jdbc做分库分表查询

    最近项目中需要通过数仓对接数据出去 需要手动写一些查询 需要支持分库分表的场景 所以就选择了 google guava 做内存缓存 通过redis做持久化缓存 通过sharding jdbc实现跨表查询 一下贴的是几个主要的类 1 数据库信
  • 使用代码来使用 JS 的 download 库来下载资源

    如题 用以下代码来使用 JS 的 download 库来下载资源 引入 download 库 import download from downloadjs 要下载的文件的 URL 和文件名 const fileUrl https exam
  • unable to boot the simulator,无法启动模拟器已解决

    我在百度上所搜的都是以前的老方法 新版的Mac已经没有Recovery了 因此我只好去bing上查找资料 方法很简单 用Mac安装镜像进入Recovery模式 然后输入 csrutil disable 就行了 剩下的和原来的方法一致
  • 浮点数和整数之间的转换

    当一个整数int i 12345被强制转换为一个FLOAT型变量 float f float i 假设sizeof int 32 float为单精度 sizeof float 32 那么i 12345 十进制 000000000000000
  • UE4_聚合图

    UE4 聚合图
  • 【Python 1-0】10个学习Python的理由以及Python的优势有哪些?

    Python的由来 首发地址 Python的创始人是吉多 范罗苏姆 1989年他在阿姆斯特丹的CWI工作 圣诞节期间 吉多 范罗苏姆为了打发圣诞节的无聊 决定开发一个新的脚本解释程序 作为ABC 语言的一种继承 之所以选择Python作为编
  • Maven覆盖私服上的jar包,本地仓库无法更新的问题

    在上传第三方jar包到私服环境时 第一次上传成功后 突然发现上传的jar包有问题 但是因为已经指定了版本号 并且是release版本的jar包 因为不想更换版本号 所以再重复上传正确的jar包 就会出现如下错误 一种解决办法是指定另外一个版
  • Gitflow工作流程

    在工作场合实施Git的时候 有很多种工作流程可供选择 此时反而会让你手足无措 本文罗列了企业团队最常用的一些Git工作流程 包括Centralized Workflow Feature Branch Workflow Gitflow Wor
  • Container命令ctr,crictl的用法

    Container命令ctr crictl的用法 版本 ctr containerd io 1 4 3 containerd 相比于docker 多了namespace概念 每个image和container 都会在各自的namespace
  • 通过Vue.js的axios请求WFS数据并处理请求回来的XML文件

    前端小白的第一个博客 前言 这个是在GIS开发过程中遇到的一个小问题 因为里面包含了蛮多的知识点 故将其记录 废话不多说进入正文 正文 此次需要解决的问题是通过wfs接口来获取到一些需要的内容 然后以这些内容为基础进行一系列的操作 以下展示
  • 1.3远程控制及文件传输

    我们经常用的是Windows操作系统 又经常需要与Ubuntu进行文件传输 同时为了能在Windows上操作我们的Ubuntu 这里推荐一个文件传输和一个远程控制的程序 文件传输WinSCP 官方下载地址 https sourceforge
  • VsCode官网快速下载

    VsCode官网 以Win10下载为例 问题描述 下载时 发现速度很慢 甚至会没有下载速度 如下图 解决方法 右键复制这个下载链接 将其前半部分修改为vscode cdn azure cn 例如 原下载链接 https az764295 v
  • Codeforces 600C Make Palindrome 【贪心 找字典序最小回文串】

    一 题目概述 C Make Palindrome time limit per test 2 seconds memory limit per test 256 megabytes input standard input
  • 如何在Anaconda安装opencv,下面分享一下教程

    1 首先下载opencv安装包 下载地址 https download csdn net download qq 42375391 12333992 2 安装完成后 在Anaconda Prompt内使用pip install完整路径文件名
  • 算法:模拟思想算法

    文章目录 实现原理 算法思路 典型例题 替换所有问号 提莫攻击 N字型变换 外观序列 总结 本篇总结的是模拟算法 实现原理 模拟算法的实现原理很简单 就是依据题意实现题意的目的即可 考察的是你能不能实现题目题意的代码能力 算法思路 没有很明