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

模拟算法

  • 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.mfbz.cn/a/670540.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

npm发布、更新、删除包

如何将自己开发的依赖包发布到npmjs上供别人使用&#xff1f;五个步骤搞定&#xff01; 实现步骤&#xff1a; 创建自己的工具包项目&#xff0c;进行开发。注册npmjs账号。执行npm login在控制台登录&#xff0c;填写用户信息。执行npm publish发布包。更新及删除。 步骤一…

Leetcode - 周赛399

目录 一&#xff0c;3162. 优质数对的总数 I 二&#xff0c;3163. 压缩字符串 III 三&#xff0c;3164. 优质数对的总数 II 四&#xff0c; 3165. 不包含相邻元素的子序列的最大和 一&#xff0c;3162. 优质数对的总数 I 假设 x 是 nums1 数组中的值&#xff0c;y 是 nums2…

Docker部署SiYuan笔记-Unraid

使用unraid的docker部署SiYuan笔记&#xff0c;简单记录 笔记说明 Siyuan笔记是一款基于markdown语法的笔记工具&#xff0c;具有活跃的社区和多设备支持。大部分功能都是免费&#xff0c;源代码开源&#xff0c;支持插件安装&#xff0c;具有很不错的使用体验。 Docker地址&a…

【应用层】 DNS 域名协议解析

文章目录 DNS(Domain Name System)出现及演化 ⏳DNS 概括&#x1f50d;DNS定义DNS 作用 DNS工作原理⚙️域名解析DNS解析的详细工作流程 DNS域名解析方式&#x1f504;静态DNS域名解析动态DNS域名解析 DNS域名解析过程的深入分析 &#x1f9d0;递归查询迭代查询 公共DNS服务器的…

Python 机器学习 基础 之 处理文本数据 【停用词/用tf-idf缩放数据/模型系数/多个单词的词袋/高级分词/主题建模/文档聚类】的简单说明

Python 机器学习 基础 之 处理文本数据 【停用词/用tf-idf缩放数据/模型系数/多个单词的词袋/高级分词/主题建模/文档聚类】的简单说明 目录 Python 机器学习 基础 之 处理文本数据 【停用词/用tf-idf缩放数据/模型系数/多个单词的词袋/高级分词/主题建模/文档聚类】的简单说明…

AI帮写:探索国内AI写作工具的创新与实用性

随着AI技术的快速发展&#xff0c;AI写作正成为创作的新风口。但是面对GPT-4这样的国际巨头&#xff0c;国内很多小伙伴往往望而却步&#xff0c;究其原因&#xff0c;就是它的使用门槛高&#xff0c;还有成本的考量。 不过&#xff0c;随着GPT技术的火热&#xff0c;国内也涌…

Keras深度学习框架实战(3):EfficientNet实现stanford dog分类

1、通过EfficientNet进行微调以实现图像分类概述 通过EfficientNet进行微调以实现图像分类&#xff0c;是一个使用EfficientNet作为预训练模型&#xff0c;并通过微调&#xff08;fine-tuning&#xff09;来适应特定图像分类任务的过程。一下是对相关重要术语的解释。 Effici…

【气象常用】剖面图

效果图&#xff1a; 主要步骤&#xff1a; 1. 数据准备&#xff1a;我用的era5的散度数据&#xff08;大家替换为自己的就好啦&#xff0c;era5数据下载方法可以看这里【数据下载】ERA5 各高度层月平均数据下载_era5月平均数据-CSDN博客&#xff09; 2. 数据处理&#xff1a…

高考试卷押运车视频监控解决方案

一、引言 高考作为我国教育领域的重要事件&#xff0c;其公正、公平和安全性一直备受社会关注。试卷押运作为高考的重要环节&#xff0c;其安全性直接关系到高考的顺利进行和考生的切身利益。因此&#xff0c;对高考试卷押运车实施视频监控解决方案&#xff0c;对于确保试卷安…

【Pr学习】01新建项目起步

【Pr学习】01新建项目起步 1、新建项目2.序列设置2.1新建序列2.2序列参数讲解2.3自定义设置 3.PR窗口认识3.1 项目窗口3.2 源窗口2.4 保存面板 4.剪辑导入4.1 素材导入4.2 视图切换4.3 时间轴4.4轨道工具4.5 节目窗口素材导入 5.基础操作5.1 取消视频音频链接5.2 单独渲染&…

在不受支持的 Mac 上安装 macOS Sonoma (OpenCore Legacy Patcher v1.5.0)

在不受支持的 Mac 上安装 macOS Sonoma (OpenCore Legacy Patcher v1.5.0) Install macOS on unsupported Macs 请访问原文链接&#xff1a;https://sysin.org/blog/install-macos-on-unsupported-mac/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主…

Hugging Face称检测到对其人工智能模型托管平台的“未经授权访问“

周五下午晚些时候&#xff0c;人工智能初创公司Hugging Face表示&#xff0c;其安全团队在本周早些时候检测到对Spaces的"未经授权访问"&#xff0c;Spaces是Hugging Face用于创建、共享和托管人工智能模型和资源的平台。 Hugging Face 在一篇博文中说&#xff0c;这…

intel深度相机D455的使用

一、D455介绍 Intel RealSense D455 是RealSense D400系列的一部分&#xff0c;这个系列的设备以其高精度和可靠性而闻名。D455相比于之前的型号&#xff08;如D415和D435&#xff09;&#xff0c;提供了更远的感知范围和更高的精度。 二、使用代码 我们先定义一下相关的函数…

深入理解Java中的List集合:解析实例、优化技巧与最佳实践

一&#xff1a;List 集合的基础 1.1 什么是 List 集合&#xff1f; List 集合是 Java 集合框架中的一种有序、可重复的数据结构&#xff0c;它继承自Collection 接口&#xff0c;允许存储多个元素。 与数组不同&#xff0c;List 集合的大小是动态可变的&#xff0c;可以根据…

Elasticsearch:基于多个 kNN 字段对文档进行评分

作者&#xff1a;来自 Elastic Madhusudhan Konda 通过具有多个 kNN 字段的最接近的文档对文档进行评分 Elasticsearch 不仅仅是一个词法&#xff08;文本&#xff09;搜索引擎。 Elasticsearch 是多功能搜索引擎&#xff0c;除了传统的文本匹配之外&#xff0c;还支持 k 最近…

海外高清短视频:四川京之华锦信息技术公司

海外高清短视频&#xff1a;探索世界的新窗口 在数字化时代的浪潮下&#xff0c;海外高清短视频成为了人们探索世界、了解异国风情的新窗口。四川京之华锦信息技术公司这些短视频以其独特的视角、丰富的内容和高清的画质&#xff0c;吸引了无数观众的目光&#xff0c;让人们足…

DI-engine强化学习入门(一)使用强化学习模型控制月球着陆器

控制程序观前提醒&#xff1a;本章内容为训练一个强化学习模型&#xff0c;并使用强化学习模型控制月球着陆器。安装和运行DI-engine示例。 什么是DI-engine? DI-engine 是一个由 OpenDILab 提供的开源强化学习&#xff08;Reinforcement Learning&#xff0c;简称RL&#xf…

一次职业院校漏洞挖掘

这个是之前挖掘到的漏洞&#xff0c;目前网站进行重构做了全新的改版&#xff0c;但是这个漏洞特别经典&#xff0c;拿出来进行分享。看到src上面的很多敏感信息泄露&#xff0c;所以自己也想找一个敏感信息泄露&#xff0c;官网如图&#xff1a; 发现在下面有一个数字校园入口…

电源滤波器怎么选用

电源滤波器怎么选用 滤波器应用场景及作用第一步&#xff1a;第二步&#xff1a;第三步&#xff1a;第四步&#xff1a; 滤波器应用场景及作用 可以有效解决EMC测试无法通过、端口防护、滤除干扰、设备保护等问题 主要功能有: 1、降低主电源谐波; 2、保护驱动装置电力电子元件…

硬币检测电路设计

一、来源&#xff1a;凡亿教育 第一场&#xff1a;硬币检测装置原理分析、电路设计以及器件选型_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Zh4y1V7Px/?p1&vd_source43eb1cb50ad3175d7f3b9385905cd88f 二、开发软件&#xff1a;KEIL MDK 三、主控芯片&#…