初识算法 · 模拟(1)

news2024/11/18 6:48:56

目录

前言:

替换所有的问号

题目解析

算法原理

算法编写

提莫攻击

题目解析

算法原理

算法编写

外观数列

题目解析

算法原理

算法编写


前言:

​本文的主题是模拟,通过三道题目讲解,一道是提莫攻击,一道是替换所有的问好,一道是外观数列。
链接分别为:
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.coloradmin.cn/o/2242657.html

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

相关文章

使用 Vue 和 Create-Vue 构建工程化前端项目

目录 前言1. 工程化的意义与 Vue 的生态支持2. 搭建 Vue 工程化项目2.1 环境准备2.2 使用 create-vue 创建项目2.2.1 初始化项目2.2.2 安装依赖2.2.3 本地运行 3. Vue 项目的目录结构解析4. Vue 开发流程详解4.1 项目入口与根组件4.1.1 main.js 的作用4.1.2 App.vue 的结构 4.2…

Android中的AMS(Activity Manager Service)详解

Android中的AMS&#xff08;Activity Manager Service&#xff09;详解 AMS (Activity Manager Service) 是 Android 系统中非常核心的服务之一&#xff0c;它负责管理应用程序的生命周期、任务栈、进程、广播、服务等功能。AMS 是整个 Android Framework 的调度中心&#xff…

31.3 XOR压缩和相关的prometheus源码解读

本节重点介绍 : xor 压缩value原理xor压缩过程讲解xor压缩prometheus源码解读xor 压缩效果 xor 压缩value原理 原理:时序数据库相邻点变化不大&#xff0c;采用异或压缩float64的前缀和后缀0个数 xor压缩过程讲解 第一个值使用原始点存储计算和前面的值的xor 如果XOR值为0&…

UNIAPP发布小程序调用讯飞在线语音合成+实时播报

语音合成能够将文字转化为自然流畅的人声&#xff0c;提供100发音人供您选择&#xff0c;支持多语种、多方言和中英混合&#xff0c;可灵活配置音频参数。广泛应用于新闻阅读、出行导航、智能硬件和通知播报等场景。 在当下大模型火爆的今日&#xff0c;语音交互页离不开语音合…

【蓝牙协议栈】【BLE】【BAS】精讲蓝牙电池服务

1. 蓝牙电池服务(Bluetooth Battery Service)概念 蓝牙电池服务是蓝牙设备与其他设备通信时用于报告其剩余电池电量的标准服务。它让用户能够随时了解蓝牙设备(如无线耳机、智能手表、蓝牙鼠标/键盘等)的电池状态,从而方便地管理这些设备的续航与电源使用。 BAS通常用于在…

无线迷踪:陈欣的网络之旅

第一章 陈欣是一名资深的网络工程师&#xff0c;工作在一家领先的科技公司。她的生活平静而有序&#xff0c;直到有一天&#xff0c;公司的无线网络突然出现了严重的问题。员工们的设备频繁断开连接&#xff0c;无法正常使用。这个问题不仅影响了工作效率&#xff0c;还引起了…

【redis】—— 环境搭建教程

上一节&#xff0c;我们大致了解了Redis的几个重要版本&#xff0c;在本教程中&#xff0c;我们选择了5.0版本&#xff0c;因为5.0已经具备了大部分的功能特性&#xff0c;并且与7.0版本相比&#xff0c;其安装使用过程更为简便。 Redis的官方并不直接支持微软的Windows操作系统…

如何查看python源代码

众所周知&#xff0c;Python内建了许多函数模块&#xff0c;并且我们可能还会安装许多第三方模块等等。 下面以getpass为例查看其源代码。 1.help(getpass) 输入该命令找到file路径&#xff0c;并且可以查看其其提供的功能。 2.利用getpass.__file__查看位置 最后找到该文件…

java笔试练习题笔记(10)

关于继承和实现说法正确的 是 &#xff1f; ( )A.类可以实现多个接口&#xff0c;接口可以继承&#xff08;或扩展&#xff09;多个接口 B.类可以实现多个接口&#xff0c;接口不能继承&#xff08;或扩展&#xff09;多个接口 C.类和接口都可以实现多个接口 D.类和接口都不…

前端开发之打印功的使用和实例(vue-print-nb)

通过插件来进行实现 前言效果图1、安装插件vue2vue32、 引入Vue项目2、 使用2.1、在项目中创建按钮并且使用v-print绑定绑定打印事件2.2、编写要打印的内容,给内容附加唯一的id2.3、绑定的时间的方法和参数3、整体代码(此代码是通过vue3来进行实现的但是逻辑都是一样的)前言…

NavVis VLX3的精度怎么去进行验证?【上海沪敖3D】

01、精度评价现状 三维捕捉行业还没有建立一个用于估算或验证移动激光扫描系统精度的统一标准。因此&#xff0c;需要高精度交付成果的专业人士很难相信设备所标注的精度规格&#xff0c;也就很难知道基于SLAM的移动激光扫描系统是否适合当前的项目。 NavVis将通过展示一种严格…

Java | Leetcode Java题解之第564题寻找最近的回文数

题目&#xff1a; 题解&#xff1a; class Solution {public String nearestPalindromic(String n) {long selfNumber Long.parseLong(n), ans -1;List<Long> candidates getCandidates(n);for (long candidate : candidates) {if (candidate ! selfNumber) {if (ans…

ES6标准-Promise对象

目录 Promise对象的含义 Promise对象的特点 Promise对象的缺点 Promise对象的基本用法 Promise对象的简单例子 Promise新建后就会立即执行 Promise对象回调函数的参数 Promise参数不会中断运行 Promise对象的then方法 Promise对象的catch()方法 Promise状态为resolv…

如何利用CSS制作导航菜单

1.利用CSS技术&#xff0c;结合链接和列表&#xff0c;设计并实现“山水之间”页面 示例代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>山水之间</title><style>.all{width:900px;}.top{width:900px;h…

Github 2024-11-17 php开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-17统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10JavaScript项目2Nextcloud服务器:安全的数据之家 创建周期:2796 天开发语言:PHP, JavaScript协议类型:GNU Affero General Public…

【工具变量】2024-2025年地级市异质性数据、城市分组异质性数据(老工业、环境保护、人口流入、沿海等)

一、数据范围&#xff1a; &#xff08;1&#xff09;南北方城市 &#xff08;2&#xff09;东中西城市 &#xff08;3&#xff09;七大地理区、八大综合经济区 &#xff08;4&#xff09;城市群&#xff0c;长三角珠三角京津冀等 &#xff08;5&#xff09;长江流域沿岸、黄河…

响应式网页设计--css

CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09;是用来控制网页的外观和布局的语言。它与 HTML 一起工作&#xff0c;通过样式定义网页元素的显示方式。CSS 可以控制多种视觉效果&#xff0c;如字体、颜色、布局、间距等。 基本语法&#xff1a; C…

定时器的小应用

第一个项目 第一步&#xff0c;RCC开启时钟&#xff0c;这个基本上每个代码都是第一步&#xff0c;不用多想&#xff0c;在这里打开时钟后&#xff0c;定时器的基准时钟和整个外设的工作时钟就都会同时打开了 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);第二步&…

基于Hadoop、hive的数仓搭建实践

文章目录 架构图Hadoop搭建Hive 搭建MySQL搭建官网文档下载配置配置hive环境变量配置日志文件配置hive-site 复制mysql 驱动包删除日志包初始化元数据启动metastore服务使用hive CLI启动hiveServer2访问hiveserver2客户端连接beeline shell连接 Dbeaver连接经验 基于HDFS Hive…

跨平台WPF框架Avalonia教程 一

安装 安装 Avalonia UI 模板​ 开始使用 Avalonia 的最佳方式是使用模板创建一个应用程序。 要安装 Avalonia 模板&#xff0c;请运行以下命令&#xff1a; dotnet new install Avalonia.Templates 备注 对于 .NET 6.0 及更早版本&#xff0c;请将 install 替换为 --inst…