初识算法 · 模拟(1)

目录

前言:

替换所有的问号

题目解析

算法原理

算法编写

提莫攻击

题目解析

算法原理

算法编写

外观数列

题目解析

算法原理

算法编写


前言:

​本文的主题是模拟,通过三道题目讲解,一道是提莫攻击,一道是替换所有的问好,一道是外观数列。
链接分别为:
1576. 替换所有的问号 - 力扣(LeetCode) 38. 外观数列 - 力扣(LeetCode)

495. 提莫攻击 - 力扣(LeetCode)
题目分为三个部分讲解,一是题目解析,二是算法原理,三是算法编写,那么,话不多说,直接进行主题咯。


替换所有的问号

题目解析

题目的要求是替换字符串里面所有的问号,而字符串里面只有小写英文和问号,我们需要将?转换为小写的字母,转换之后,前后不能有连续的相同的字符,并且我们不能够修改非?字符,也就是只能修改问号咯,这里顺带一提,为什么这种算法是模拟。

因为这种题目是比较有意思的,解法相当于已经告诉我们了,不过需要我们自己去模拟实现而已。

相对来说的话,我们在没有接触算法之前,大部分可能都是模拟的吧。

那么我们就进入到算法原理部分吧。

算法原理

算法原理……就是模拟咯,我们模拟这个过程就行。

只需要保证前后没有重复即可:

当然了,我们还有注意部分细节问题,比如问号如果在前面的话,我们就需要判断一下,如果不满足这个条件,就要判断不能和前面的相等了,问号在字符串末尾同理。

算法原理是非常简单的,遍历一次字符串就可以了。

算法编写

class Solution {
public:
    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 || ch != s[i - 1]) && (i == s.size() - 1 || ch != s[i + 1]))
                    {
                        s[i] = ch;
                    }
                }
            }
        }
        return s;
    }
};

这里的判断也是比较充分的利用了||运算符的短路特点,恰好能够判断,如果i不是0或者是size -1的情况和i刚好是两种极端值的情况,只能说非常巧妙了。 


提莫攻击

题目解析

各位请不要看到提莫攻击就去打lol了奥,先看题吧哈哈哈。

对于这道题,我们可以简化题目,也就是提莫的攻击有多次,每次攻击可以让敌方英雄中毒duration秒,每次攻击会冲击持续时间,要求我们返回的是总中毒秒数。

那么题目我们搞清楚了,现在进入原理部分吧!

算法原理

算法是非常简单的,就有点像高中?或者是初中的一个覆盖问题,我们只需要判断两个间隔之间的差值即可,如果两次攻击间隔之间的差值大于了持续时间,那么中毒的持续时间吃满了就,如果间隔小于持续时间,那么中毒的持续时间就相当于两次攻击间隔的时间:

不过如果走到了数组的最后,没有重置中毒的持续状态,那么直接+duration就行,这是对于边界情况的处理。 

原理我们也清楚了,直接进入到算法原理编写吧!

算法编写

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

外观数列

题目解析

题目描述的多麻烦的,其实我们理解之后,它描述的不过是上一项的数字情况而已,默认数列第一项是1,所以第二项描述的时候,是1个1,那么第二项就是11,对于第三项描述的时候是描述第二项,第二项有两个1,所以是21。

最后求第几项的字符串组成就行。

题目要求我们懂了,现在进入算法原理部分。

算法原理

题目的要求不过就是让我们从一堆数字里面,找相同的,组成由相同数字的个数 + 数字组成的字符串而已。所以计数器是必要的,用一个指针用来指向某个特定的元素,让另一个指针一直走,直到找到不同的,然后让+=组成字符串即可。

这里穿插使用到的方法是双指针算法,让两个指针从同一个方向移动即可,并且,我们应该处理一下边界情况,最后返回结果就可以了。

对于循环部分,解释的次数相当于数组长度 - 1,因为第一次是不用解释的。

算法编写

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

感谢阅读!

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

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

相关文章

〔 MySQL 〕数据类型

目录 1.数据类型分类 2 数值类型 2.1 tinyint类型 2.2 bit类型 2.3 小数类型 2.3.1 float 2.3.2 decimal 3 字符串类型 3.1 char 3.2 varchar 3.3 char和varchar比较 4 日期和时间类型 5 enum和set mysql表中建立属性列&#xff1a; 列名称&#xff0c;类型在后 n…

数据结构王道P234第二题

#include<iostream> using namespace std; int visit[MAxsize]; int color[MaxSize];//1表示红&#xff0c;2表示白&#xff1b; bool dfs(Graph G, int i){visit[i]1;ArcNode *p;bool flag1;for(pG.vertices[i].firsrarc; p ; pp->next){int jp->adjvex;if(!visi…

算法——两两交换链表中的节点(leetcode24)

这是一道对于链表节点进行操作的题目非常考验对于链表操作的基本功&#xff1b; 解法: 本题的解法结合下图来进一步解释 创建一个虚拟节点指向头结点以便使代码逻辑看起来更为简便且操作节点容易,定义cur是为了方便找到cur之后的两个节点进行交换操作定义pre和aft是为了保存执…

【AI图像生成网站Golang】项目架构

AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与调试(等待更新) 四、项目架构 本项目的后端基于Golang和Gin框架开发&#xff0c;主要包括的模块有&#xff1a; backend/ ├── …

翼鸥教育:从OceanBase V3.1.4 到 V4.2.1,8套核心集群升级实践

引言&#xff1a;自2021年起&#xff0c;翼鸥教育便开始应用OceanBase社区版&#xff0c;两年间&#xff0c;先后部署了总计12套生产集群&#xff0c;其中核心集群占比超过四分之三&#xff0c;所承载的数据量已突破30TB。自2022年10月&#xff0c;OceanBase 社区发布了4.2.x 版…

ESP32-S3模组上跑通esp32-camera(19)

接前一篇文章&#xff1a;ESP32-S3模组上跑通esp32-camera&#xff08;18&#xff09; 本文内容参考&#xff1a; esp32-camera入门&#xff08;基于ESP-IDF&#xff09;_esp32 camera-CSDN博客 OV5640手册解读-CSDN博客 ESP32_CAM CameraWebServer例程源码解析笔记&#xf…

vmWare虚拟环境centos7安装Hadoop 伪分布式实践

背景&#xff1a;近期在研发大数据中台&#xff0c;需要研究Hadoop hive 的各种特性&#xff0c;需要搭建一个Hadoop的虚拟环境&#xff0c;本来想着使用dock &#xff0c;但突然发现docker 公共仓库的镜像 被XX 了&#xff0c;无奈重新使用vm 搭建虚拟机。 大概经历了6个小时完…

ARM(安谋) China处理器

0 Preface/Foreword 0.1 参考博客 Cortex-M23/M33与STAR-MC1星辰处理器 ARM China&#xff0c;2018年4月established&#xff0c;独立运行。 1 处理器类型 1.1 周易AIPU 1.2 STAR-MC1&#xff08;星辰处理器&#xff09; STAT-MC1&#xff0c;主要为满足AIOT应用性能、功…

c++--------《set 和 map》

c--------《set 和 map》 1 set系列的使⽤1.1 set类的介绍1.2 set的构造和迭代器1.3 set重要接口 2 实现样例2.1: insert和迭代器遍历使⽤样例&#xff1a;2.2: find和erase使⽤样例&#xff1a; 练习3.map系列的使用3.1 map类的介绍3.1.1 pair类型介绍 3.2 map的数据修改3.3mu…

MySQL面试之底层架构与库表设计

华子目录 mysql的底层架构客户端连接服务端连接的本质&#xff0c;连接用完会立马丢弃吗解析器和优化器的作用sql执行前会发生什么客户端的连接池和服务端的连接池数据库的三范式 mysql的底层架构 客户端连接服务端 连接的本质&#xff0c;连接用完会立马丢弃吗 解析器和优化器…

vscode vite+vue3项目启动调试

1、经常我们在普通的项目中&#xff0c;如果算法并不复杂&#xff0c;那么基本上console.log就可以搞定&#xff0c;当然也可以直接alert&#xff0c;打包的时候如果不去掉&#xff0c;还会在发版中上接弹出&#xff0c;给你个惊喜。 2、碰到了有些算法过程比较复杂的情况下&a…

详解八大排序(一)------(插入排序,选择排序,冒泡排序,希尔排序)

文章目录 前言1.插入排序&#xff08;InsertSort&#xff09;1.1 核心思路1.2 实现代码 2.选择排序&#xff08;SelectSort&#xff09;2.1 核心思路2.2 实现代码 3.冒泡排序&#xff08;BubbleSort&#xff09;3.1 核心思路3.2 实现代码 4.希尔排序&#xff08;ShellSort&…

IPv6 NDP 记录

NDP&#xff08;Neighbor Discovery Protocol&#xff0c;邻居发现协议&#xff09; 是 IPv6 的一个关键协议&#xff0c;它组合了 IPv4 中的 ARP、ICMP 路由器发现和 ICMP 重定向等协议&#xff0c;并对它们作出了改进。该协议使用 ICMPv6 协议实现&#xff0c;作为 IPv6 的基…

【包教包会】CocosCreator3.x框架——带翻页特效的场景切换

一、效果演示 二、如何获取 1、https://gitee.com/szrpf/TurnPage 2、解压&#xff0c;导入cocos creator&#xff08;版本3.8.2&#xff09;&#xff0c;可以直接运行Demo演示 三、算法思路 1、单场景 页面预制体 通过loadScene来切换页面&#xff0c;无法实现页面特效。…

拉取docker镜像应急方法

发现许多docker hub镜像网址速度也慢得发指啦&#xff0c;如果想速度快点&#xff0c;可以考虑买个按量计费的公有云服务器&#xff0c;用他们的内网镜像&#xff0c;然后再导出&#xff0c;然后传到本地。 开通服务器 可以考虑个开通最低配的&#xff0c;这里我用的是腾讯的…

Cyberchef配合Wireshark提取并解析HTTP/TLS流量数据包中的文件

本文将介绍一种手动的轻量级的方式&#xff0c;还原HTTP/TLS协议中传输的文件&#xff0c;为流量数据包中的文件分析提供帮助。 如果捕获的数据包中存在非文本类文件&#xff0c;例如png,jpg等图片文件&#xff0c;或者word&#xff0c;Excel等office文件异或是其他类型的二进…

Stable diffusion详细讲解

&#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&…

机器学习-37-对ML的思考之机器学习发展的三个阶段和驱动AI发展三驾马车的由来

文章目录 1 引言2 机器学习发展的三个阶段2.1 萌芽期(20世纪50年代)2.1.1 达特茅斯会议(人工智能诞生)2.1.2 机器学习名称的由来2.2 知识期(20世纪80年代)2.2.1 知识瓶颈问题2.2.2 机器学习顶级会议ICML2.2.3 Machine Learning创刊2.2.4 神经网络规则抽取2.3 算法期(20世纪90年…

SpringCloud篇(服务网关 - GateWay)

目录 一、简介 二、为什么需要网关 二、gateway快速入门 1. 创建gateway服务&#xff0c;引入依赖 2. 编写启动类 3. 编写基础配置和路由规则 4. 重启测试 5. 网关路由的流程图 6. 总结 三、断言工厂 四、过滤器工厂 1. 路由过滤器的种类 2. 请求头过滤器 3. 默认…

代码段数据段的划分

DPL DPL存储在段描述符中&#xff0c;规定访问该段的权限级别(Descriptor Privilege Level) CPL CPL是当前进程的权限级别(Current Privilege Level)&#xff0c;是当前正在指向的代码段所在段的成绩&#xff0c;也就是CS段的DPL RPL RPL说明的是进程对段访问的请求权限(Re…