【基础算法总结】模拟篇
目录
- 一,算法介绍
- 二,算法原理和代码实现
- 1576.替换所有的问号
- 495.提莫攻击
- 6.Z字形变换
- 38.外观数列
- 1419.数青蛙
- 三,算法总结
一,算法介绍
模拟算法本质就是"依葫芦画瓢",就是在题目中已经告诉了我们该如何操作,我们只要把题目中的过程转化成代码即可。特点是思路简单,难点是十分考验代码功底。
二,算法原理和代码实现
1576.替换所有的问号



算法原理:
没有那么多弯弯绕绕,就是从前往后遍历字符串,如果出现 ‘?’,就用26个字母判断一个 ‘?’ 字符的前一个和后一个字符,保证不出现前后两个连续相同的字符,再把 ‘?’ 替换即可。
细节问题:
要注意边界情况的判断,就是当 ‘?’ 出现在第一个位置和最后一个位置的处理。
代码实现:
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;}
};
495.提莫攻击


算法原理:
根据示例,可以得到下面的规律:
代码实现:
class Solution {
public:int findPoisonedDuration(vector<int>& timeSeries, int duration) {int n = timeSeries.size();int ret = 0;for(int i = 1; i <= n-1; i++){int x = timeSeries[i] - timeSeries[i-1];if(x >= duration)ret += duration;else ret += x;}return ret + duration;}
};
6.Z字形变换


算法原理:
我们不直接把字符进行Z变换,把每个字符的下标抽象出来:
然后在表中找出下标的规律,直接在字符串中根据找出的下标取字符:
细节问题:
当给定行数为 1 行时,计算的公差 d == 0,会造成死循环。所以要特殊处理,此时直接返回原字符串即可。
代码实现:
class Solution
{
public:string convert(string s, int numRows) {// 处理特殊情况if(numRows == 1) return s;int d = 2 * numRows - 2, n = s.size();string ret;// 处理第一行的字符for(int i = 0; i < n; i += d)ret += s[i];// 出来中间行的字符for(int k = 1; k < numRows-1; k++) // 枚举中间的每一行{for(int i = k, j = d - k; i < n || j < n; i += d, j += d){if(i < n) ret += s[i];if(j < n) ret += s[j];}}// 处理最后一行字符for(int i = numRows-1; i < n; i += d)ret += s[i];return ret;}
};
38.外观数列



算法原理:
本题使用:模拟+双指针
这里的双指针的作用就是从前往后遍历相同字符的区域,计算出相同字符的个数。
代码实现:
class Solution
{
public:string countAndSay(int n) {if(n == 1) return to_string(1);string ret;string tmp = to_string(1);for(int i = 0; i < n-1; i++){ret = "";int left = 0, right = 0, len = tmp.size();while(right < len){while(right < len && tmp[right] == tmp[left]) right++;ret += to_string(right - left) + tmp[left];left = right;}tmp = ret;}return tmp;}
};
1419.数青蛙


算法原理:
这道题在模拟算法中是一道比较难的题。
使用:模拟+哈希表。
遍历所给的字符串,与叫声字符串进行对比映射:
通过模拟,可以进行总结:
细节处理:
(1) 两个哈希表的作用:
第一个哈希表用数组模拟,目的是统计字符出现的个数,但不是用字符进行映射统计的,而是根据叫声字符串 "croak"的下标。
第二个哈希表用 hash< char, int > 实现,表示的是叫声字符串"croak"的每个字符,和每个字符对应的下标。
(2) 当遍历完整个 croakOfFrogs 字符串后,还需要把第一个哈希表遍历检查一下。
代码实现:
根据上面的总结,实现代码有多种方式,下面的实现方式是一种通用的,因为可能有些题目给的叫声字符串不是只有五个字符的"croak",而是其他更长的。
class Solution
{
public:int minNumberOfFrogs(string croakOfFrogs) {string t = "croak";int n = t.size();vector<int> hash(n); // 用数组模拟哈希unordered_map<char, int> index; // [x,x这个字符的下标]for(int i = 0; i < n; i++)index[t[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;else hash[i-1]--, hash[i]++;}}// 除了最后一个字符'k'外,其他字符如果还有出现,直接返回-1for(int i = 0; i < n-1; i++)if(hash[i] != 0) return -1;return hash[n-1];}
};
三,算法总结
解决有关模拟类的题型,最重要的就是根据题目写代码。有些模拟题可能正面做困难,进行优化时一般都是"找规律"进行转换。
相关文章:
【基础算法总结】模拟篇
目录 一,算法介绍二,算法原理和代码实现1576.替换所有的问号495.提莫攻击6.Z字形变换38.外观数列1419.数青蛙 三,算法总结 一,算法介绍 模拟算法本质就是"依葫芦画瓢",就是在题目中已经告诉了我们该如何操作…...
《深度学习》PyTorch 手写数字识别 案例解析及实现 <下>
目录 一、回顾神经网络框架 1、单层神经网络 2、多层神经网络 二、手写数字识别 1、续接上节课代码,如下所示 2、建立神经网络模型 输出结果: 3、设置训练集 4、设置测试集 5、创建损失函数、优化器 参数解析: 1)para…...
【笔记】材料分析测试:晶体学
晶体与晶体结构Crystal and Crystal Structure 1.晶体主要特征 固态物质可以分为晶态和非晶态两大类,分别称为晶体和非晶体。 晶体和非晶体在微观结构上的区别在于是否具有长程有序。 晶体(长程有序)非晶(短程有序)…...
飞塔Fortigate7.4.4的DNS劫持功能
基础网络配置、上网策略、与Server的VIP配置(略)。 在FortiGate上配置DNS Translation,将DNS请求结果为202.103.12.2的DNS响应报文中的IP地址修改为Server的内网IP 10.10.2.100。 config firewall dnstranslationedit 1set src 2.13.12.2set…...
Unity 设计模式 之 行为型模式 -【状态模式】【观察者模式】【备忘录模式】
Unity 设计模式 之 行为型模式 -【状态模式】【观察者模式】【备忘录模式】 目录 Unity 设计模式 之 行为型模式 -【状态模式】【观察者模式】【备忘录模式】 一、简单介绍 二、状态模式(State Pattern) 1、什么时候使用状态模式 2、使用状态模式的…...
【RabbitMQ】RabbitMQ 的概念以及使用RabbitMQ编写生产者消费者代码
目录 1. RabbitMQ 核心概念 1.1生产者和消费者 1.2 Connection和Channel 1.3 Virtual host 1.4 Queue 1.5 Exchange 1.6 RabbitMO工作流程 2. AMQP 3.RabbitMO快速入门 3.1.引入依赖 3.2.编写生产者代码 3.3.编写消费者代码 4.源码 1. RabbitMQ 核心概念 在安装…...
openmv与stm32通信
控制小车视觉循迹使用 OpenMV 往往是不够的。一般使用 OpenMV 对图像进行处理,将处理过后的数据使用串口发送给STM32,使用STM32控制小车行驶。本文主要讲解 OpenMV 模块与 STM32 间的串口通信以及两种循迹方案,分别是划分检测区域和线性回归。…...
C++ STL全面解析:六大核心组件之一----序列式容器(vector和List)(STL进阶学习)
目录 序列式容器 Vector vector概述 vector的迭代器 vector的数据结构 vector的构造和内存管理 vector的元素操作 List List概述 List的设计结构 List的迭代器 List的数据结构 List的内存构造 List的元素操作 C标准模板库(STL)是一组高效的…...
【c数据结构】OJ练习篇 帮你更深层次理解链表!(相交链表、相交链表、环形链表、环形链表之寻找环形入口点、判断链表是否是回文结构、 随机链表的复制)
目录 一. 相交链表 二. 环形链表 三. 环形链表之寻找环形入口点 四. 判断链表是否是回文结构 五. 随机链表的复制 一. 相交链表 最简单粗暴的思路,遍历两个链表,分别寻找是否有相同的对应的结点。 我们对两个链表的每个对应的节点进行判断比较&…...
微软开源GraphRAG的使用教程(最全,非常详细)
GraphRAG的介绍 目前微软已经开源了GraphRAG的完整项目代码。对于某一些LLM的下游任务则可以使用GraphRAG去增强自己业务的RAG的表现。项目给出了两种使用方式: 在打包好的项目状态下运行,可进行尝试使用。在源码基础上运行,适合为了下游任…...
使用Refine构建项目(1)初始化项目
要初始化一个空的Refine项目,你可以使用Refine提供的CLI工具create-refine-app。以下是初始化步骤: 使用npx命令: 在命令行中运行以下命令来创建一个新的Refine项目: npx create-refine-applatest my-refine-project这将引导你通过…...
【Docker】安装及使用
1. 安装Docker Desktop Docker Desktop是官方提供的桌面版Docker客户端,在Mac上使用Docker需要安装这个工具。 访问 Docker官方页面 并下载Docker Desktop for Mac。打开下载的.dmg文件,并拖动Docker图标到应用程序文件夹。安装完成后,打开…...
[大语言模型-论文精读] 以《黑神话:悟空》为研究案例探讨VLMs能否玩动作角色扮演游戏?
1. 论文简介 论文《Can VLMs Play Action Role-Playing Games? Take Black Myth Wukong as a Study Case》是阿里巴巴集团的Peng Chen、Pi Bu、Jun Song和Yuan Gao,在2024.09.19提交到arXiv上的研究论文。 论文: https://arxiv.org/abs/2409.12889代码和数据: h…...
提升动态数据查询效率:应对数据库成为性能瓶颈的优化方案
引言 在现代软件系统中,数据库性能是决定整个系统响应速度和处理能力的关键因素之一。然而,当系统负载增加,特别是在高并发、大数据量场景下,数据库性能往往会成为瓶颈,导致查询响应时间延长,影响用户体验…...
Prometheus+grafana+kafka_exporter监控kafka运行情况
使用Prometheus、Grafana和kafka_exporter来监控Kafka的运行情况是一种常见且有效的方案。以下是详细的步骤和说明: 1. 部署kafka_exporter 步骤: 从GitHub下载kafka_exporter的最新版本:kafka_exporter项目地址(注意ÿ…...
在vue中:style 的几种使用方式
在日常开发中:style的使用也是比较常见的: 亲测有效 1.最通用的写法 <p :style"{fontFamily:arr.conFontFamily,color:arr.conFontColor,backgroundColor:arr.conBgColor}">{{con.title}}</p> 2.三元表达式 <a :style"{height:…...
商城小程序后端开发实践中出现的问题及其解决方法
前言 商城小程序后端开发中,开发者可能会面临多种问题。以下是一些常见的问题及其解决方法: 一、性能优化 问题:随着用户量的增加和功能的扩展,商城小程序可能会出现响应速度慢、处理效率低的问题。 解决方法: 对数…...
阿里Arthas-Java诊断工具,基本操作和命令使用
Arthas 是阿里巴巴开源的一款Java诊断工具,深受开发者喜爱。它可以帮助开发者在不需要修改代码的情况下,对运行中的Java程序进行问题诊断和性能分析。 软件具体使用方法 1 启动 Arthas,此时可能会出现好几个jvm的进程号,输入序号…...
Go 1.19.4 路径和目录-Day 15
1. 路径介绍 存储设备保存着数据,但是得有一种方便的模式让用户可以定位资源位置,操作系统采用一种路径字符 串的表达方式,这是一棵倒置的层级目录树,从根开始。 相对路径:不是以根目录开始的路径,例如 a/b…...
jEasyUI 创建标签页
jEasyUI 创建标签页 jEasyUI(jQuery EasyUI)是一个基于jQuery的框架,它为Web应用程序提供了丰富的用户界面组件。标签页(Tabs)是jEasyUI中的一个常用组件,用于在一个页面内组织多个面板,用户可…...
告别复制粘贴:用影刀RPA+飞书多维表格,我把每周的销售数据汇总从2小时缩到5分钟
告别复制粘贴:用影刀RPA飞书多维表格实现销售数据自动化革命 每周五下午,市场部的张经理总要面对同样的噩梦:从七个不同渠道导出销售数据,手动核对格式差异,复制粘贴到汇总表,再计算各类指标。这个重复劳动…...
解决Python SocketIO客户端连接问题
引言 在构建一个IT自动化系统时,管理多个电脑的需求日益增强。为了实现这一目标,我采用了以下技术栈: 前端:React 后端****中间层:NodeJS 终端代理:Python 然而,在使用Python实现SocketIO客户端时,我遇到了一个问题:Python客户端无法正常打印连接成功的消息。本文将详…...
3分钟掌握绝地求生压枪黑科技:罗技鼠标宏终极指南
3分钟掌握绝地求生压枪黑科技:罗技鼠标宏终极指南 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为《绝地求生》中AKM的后坐力而…...
接口实现第二步骤
接口实现流程模块化路由 -> API 接口规范文档定义模型类 -> 数据库表 (数据库设计文档)在 crud 文件夹里面创建文件,封装操作数据库的方法在路由处理函数里面调用 crud 封装好的方法,响应结果定义模型类规范基类,…...
航美实木板:以匠心守健康,用实力赢信赖——一位经销商的真情告白
“一张好的板材,守护的不是一个人,而是一个家庭的健康与幸福。”说这句话的汪总,是实木行业的“老炮儿”,深耕实木定制多年的他,对木材“热胀冷缩必变形开裂”的特性深信不疑。直到刷到航美实木板的宣传视频࿰…...
文书妙笔专为公文写作打造,让写材料效率翻倍
不同于市面上通用型写作工具,文书妙笔每一项功能都为公文写作量身定制,真正实现“写材料效率翻倍”。作为专为公文写作打造的平台,平台内置40W优质公文范文库,每日持续更新,更整合了最新政策表述、基层工作案例和规范金…...
为什么你的Python AOT项目预算超支300%?2026成本控制策略失效的4个关键信号(附审计检查表)
第一章:Python原生AOT编译成本失控的根源诊断Python 原生 AOT(Ahead-of-Time)编译正面临严峻的工程现实:编译时间激增、内存占用爆炸、二进制体积膨胀,且生成代码性能常低于预期。这一“成本失控”现象并非偶然&#x…...
Phi-3-mini-4k-instruct-gguf入门指南:轻量模型为何更适合中小团队AI能力快速验证
Phi-3-mini-4k-instruct-gguf入门指南:轻量模型为何更适合中小团队AI能力快速验证 1. 为什么选择轻量模型 在AI技术快速发展的今天,中小团队常常面临一个困境:既想快速验证AI能力,又受限于计算资源和时间成本。这正是Phi-3-mini…...
腾讯云推出“领域虾”CloudQ:把企业云上治理,装进你每天都在用的聊天框
好家伙,腾讯云又给龙虾市场上新了。最近,腾讯云官宣的 CloudQ IT 老师傅(全球首款 ITOM“领域虾”),直接把云上的技术难题给办了。你甚至都不用登录控制台、不用敲命令,在微信里聊聊天就能完成架构巡检、风…...
基于Qwen3.5-2B的MySQL智能运维助手:自动SQL优化与故障排查
基于Qwen3.5-2B的MySQL智能运维助手:自动SQL优化与故障排查 1. 引言:当数据库运维遇上AI助手 最近跟几位DBA朋友聊天,发现他们每天要花大量时间处理两类重复性工作:分析慢SQL和排查数据库故障。一位在电商公司工作的朋友吐槽&am…...





