初识算法 · 模拟(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;}
};

感谢阅读!

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

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

相关文章

【数值分析】高斯-赛德尔方法、规范化幂法、原点移位法

【数值分析】高斯-赛德尔方法、规范化幂法、原点移位法 题目 要求 代码实现过程不能调用任何库函数自带的“线性 方程组求解、特征值求解库函数” 利用高斯-赛德尔方法求解上述线性方程组 使用Python编程求解矩阵A与列向量b import numpy as np import sympy as spdef crea…

【CUDA】了解GPU架构

目录 一、初步认识 二、Fermi架构 三、Kepler 架构 3.1 动态并行 3.2 Hyper-Q 一、初步认识 SM&#xff08;Streaming Multiprocessors&#xff09;是GPU架构中非常重要的部分&#xff0c;GPU硬件的并行性就是由SM决定的。以Fermi架构为例&#xff0c;其包含以下主要组成…

64位程序调用32位dll解决方案

最近在做64位代码移植&#xff0c;发现很多老代码使用到了第三方的32位dll;而且这些第三方32位dll库已经年代久远&#xff0c;原开发商已不再了&#xff1b;所以急切的需要在64位主程序 中使用老的32位dll;查询很多解决方案 发现目前只有使用com 进程外组件的方法可以解决此问题…

【HOT100第五天】搜索二维矩阵 II,相交链表,反转链表,回文链表

240.搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 先动手写写最简单方法&#xff0c;二重循环。 class Solution { public:bool searchMa…

模板元函数应用:输出字符串。

看下面三个字符串&#xff0c;s1,s2,s3 &#xff1a; string s1 "逆天邪神";wstring s2 _t("焚星妖莲");_string s3 "焚绝尘"; 在控制台输出字符串&#xff0c;可能的一个方案是&#xff1a; void print_test(const wstring& s) {std::…

pytest | 框架的简单使用

这里写目录标题 单个文件测试方法执行测试套件的子集测试名称的子字符串根据应用的标记进行选择 其他常见的测试命令 pytest框架的使用示例 pytest将运行当前目录及其子目录中test_*.py或 *_test.py 形式的所有 文件 文件内的函数名称可以test* 或者test_* 开头 单个文件测试…

【C++】类和对象-深度剖析默认成员函数-上

> &#x1f343; 本系列为初阶C的内容&#xff0c;如果感兴趣&#xff0c;欢迎订阅&#x1f6a9; > &#x1f38a;个人主页:[小编的个人主页])小编的个人主页 > &#x1f380; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 > ✌️ &#x1f91e; &#x1…

Web性能优化:从基础到高级

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Web性能优化&#xff1a;从基础到高级 Web性能优化&#xff1a;从基础到高级 Web性能优化&#xff1a;从基础到高级 引言 基础优…

当 docker-compose.yaml 文件部署时,Dify 线上版本升级过程

如果线上 Dify 是通过 docker-compose.yaml 文件部署的&#xff0c;那么当 Dify 版本升级时该如何操作呢&#xff1f;官方已经给出了 Docker compose 和 Source Code 两种方式。相对而言&#xff0c;前者更简单些&#xff0c;至少不需要安装依赖包和迁移数据库文件。为了更加具…

如何让手机ip变成动态

在数字化浪潮中&#xff0c;手机已成为我们日常生活中不可或缺的一部分。无论是浏览网页、使用社交媒体还是进行在线购物&#xff0c;手机都扮演着举足轻重的角色。然而&#xff0c;在享受网络带来的便利时&#xff0c;我们也需要关注网络安全和隐私保护。静态IP地址可能让手机…

vue3 如何调用第三方npm包内部的 pinia 状态管理库方法

抛砖引玉: 如果在开发vue3项目是, 引用了npm第三方包 ,而且这个包内使用了Pinia 状态管理库,那我们如何去调用 npm内部的 Pinia 状态管理库呢? 实际遇到的问题: 今天在制作npm包时遇到的问题,之前Vue2版本的时候状态管理库用的Vuex ,当时调用npm包内的状态管理库很简单,直接引…

Linux笔记---调试工具GDB(gdb)

1. gdb的概念 GDB&#xff0c;全称GNU Debugger&#xff0c;是一个功能强大的开源调试工具&#xff0c;广泛用于Unix和类Unix系统&#xff0c;以及Microsoft Windows和macOS平台。GDB允许开发者在程序执行过程中查看内部运行情况&#xff0c;帮助定位和修复程序中的错误。 gd…

编译器gcc/g++

gcc 只用来编译C g 编译C/C 1.预处理&#xff08;进行宏替换/去注释/条件编译/头文件展开等&#xff09; 先创建 code.c 文件 -E --> 从现在开始&#xff0c;进行程序的翻译&#xff0c;一旦预处理做完&#xff0c;就停下来 -o --> 表明 -o 后面的文件名称 code…

一.安装版本为19c的Oracle数据库管理系统(Oracle系列)

1.数据库版本信息&#xff1a; 版本信息&#xff1a; 或者直接由命令查出来&#xff1a; 2.操作系统的版本信息 3.安装包下载与上传 可以去oracle官网下载也可以从其他人的百度网盘链接中下载&#xff1a; 使用xftp工具或者其他的工具&#xff08;mobaxterm&#xff09;上传到l…

DimensionX 部署笔记

目录 生成视频用CogVideoX-5b-I2V 推理代码&#xff1a; DimensionX 生成视频用CogVideoX-5b-I2V 推理代码&#xff1a; 可以生成&#xff0c;从左向右旋转的&#xff0c;也可以生成从上往下旋转的&#xff1a; import torch from diffusers import CogVideoXImageToVideo…

uni-app移动端与PC端兼容预览PDF文件

过程遇到的问题 1、如果用的是最新的版本的pdfjs的话&#xff0c;就会报Promise.withResolvers 不是一个方法的错误&#xff0c;原因是Promise.withResolvers是ES15新特性&#xff0c;想了解可参考链接&#xff0c;这里的解决方案是将插件里的涉及到Promise.withResolvers的地…

Node.js | Yarn下载安装与环境配置

一、安装Node.js Yarn 是 Node.js 下的包管理工具&#xff0c;因此想要使用 Yarn 就必须先下载 Node.js。 推荐参考&#xff1a;Node.js | npm下载安装及环境配置教程 二、Yarn安装 打开cmd&#xff0c;输入以下命令&#xff1a; npm install -g yarn检查是否安装成功&…

开源TTS语音克隆神器GPT-SoVITS_V2版本地整合包部署与远程使用生成音频

文章目录 前言1.GPT-SoVITS V2下载2.本地运行GPT-SoVITS V23.简单使用演示4.安装内网穿透工具4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 本文主要介绍如何在Windows系统电脑使用整合包一键部署开源TTS语音克隆神器GPT-SoVITS&#xff0c;并结合cpolar内网穿透工…

[Docker#11] 容器编排 | .yml | up | 实验: 部署WordPress

目录 1. 什么是 Docker Compose 生活案例 2. 为什么要使用 Docker Compose Docker Compose 的安装 Docker Compose 的功能 使用步骤 核心功能 Docker Compose 使用场景 Docker Compose 文件&#xff08;docker-compose.yml&#xff09; 模仿示例 文件基本结构及常见…

鸿蒙NEXT应用示例:切换图片动画

【引言】 在鸿蒙NEXT应用开发中&#xff0c;实现图片切换动画是一项常见的需求。本文将介绍如何使用鸿蒙应用框架中的组件和动画功能&#xff0c;实现不同类型的图片切换动画效果。 【环境准备】 电脑系统&#xff1a;windows 10 开发工具&#xff1a;DevEco Studio NEXT B…