当前位置: 首页 > article >正文

算法:模拟

1.替换所有的问号

1576. 替换所有的问号 - 力扣(LeetCode)

  • 遍历字符串​:通过外层循环逐一检查每个字符。
  • 遇到 ? 时处理​:
    • 内层循环遍历小写字母('a' 到 'z')。
    • 对每个字母检查是否满足:
      • 与前一个字符不同​(若 ? 在开头则无需检查)。
      • 与后一个字符不同​(若 ? 在末尾则无需检查)。
    • 找到符合条件的字母后,立即将 ? 替换为该字母。
  • 返回结果​:修改后的字符串
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 || s[i - 1] != ch) &&(i == s.size() - 1 || s[i + 1] != ch)){s[i] = ch;}}}}return s;}
};

2.提莫攻击

495. 提莫攻击 - 力扣(LeetCode)

思路:计算后一个值减前一个值与中毒时间比较,大于等于这个中毒时间就直接加上这个中毒时间,否则就加上这个间隔时间。

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

3. Z字形变换

6. Z 字形变换 - 力扣(LeetCode)

思路:找规律 公差d = 2 * numRows - 2 (n为字符串s的长度)。每一行每一行的处理元素(下标索引)

numRows == 1时直接返回字符串s

第一行:0  ->  0 + d  ->  0 + 2d  ->......-> 0 + kd。

第x行(1 <= x < numRows - 1)两个数两个数向后走:(x, d - x)-> (x + d, d - x + d) -> ......->(x + kd, d - x + kd)。

最后一行:numRows  - 1 -> numRows  - 1 + d -> ...... -> numRows  - 1 + kd。

  • 第一行:索引为0, d, 2d, 3d, ... 直到超出字符串长度。
  • 中间行(从第2行到第numRows-1行):每一行有两个序列。第一个序列起始为当前行号x(从0开始则行号为x,注意第一行是x=0),步长为d;第二个序列起始为d-x,步长也为d。注意这两个序列在同一周期内,且每一行中这两个索引交替出现(但按顺序是先第一个序列的,再第二个序列的,然后进入下一周期)。
  • 最后一行(第numRows行,索引为numRows-1):索引为(numRows-1), (numRows-1)+d, (numRows-1)+2d, ...
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;}
};

4.外观数列

38. 外观数列 - 力扣(LeetCode)

思路:模拟+双指针

  • 使用双指针法识别连续相同字符:
    • left:标记当前字符组的起始位置
    • right:向前扫描直到遇到不同字符
  • 计算连续字符长度:len = right - left
  • 生成描述字符串:"长度" + "字符"
  • 每轮处理完成后,将结果赋值给 ret 作为下一轮输入
class Solution 
{
public:string countAndSay(int n){string ret = "1";for(int i = 1; i < n; i++)//解释n - 1次ret{string tmp;for(int left = 0, right = 0; right < ret.size();){while(right < ret.size() && ret[left] == ret[right])right++;int len = right - left;tmp += to_string(len) + ret[left];left = right;}ret = tmp;}return ret;}
};

5.数青蛙

1419. 数青蛙 - 力扣(LeetCode)

思路:模拟,要保证找到青蛙的最小个数,遍历字符串,并且将字符放入哈希表中(放入规则如下)

当遍历到字符r , o , a , k时,找前驱字符是否存在哈希表中,存在则前驱个数--,当前字符++;不存在则返回 -1。

当遍历到字符c时,找到最后一个字符是否在哈希表中存在,存在则最后一个字符--,当前字符++;不存在当前字符++。

直接用if-else的写法

class Solution 
{
public:int minNumberOfFrogs(string croakOfFrogs) {unordered_map<char, int> hash = {{'c',0}, {'r',0}, {'o',0}, {'a',0}, {'k',0}};for(int i = 0; i < croakOfFrogs.size(); i++){if(croakOfFrogs[i] == 'c'){if(hash['k'] > 0){hash['k']--;}hash['c']++;}else if(croakOfFrogs[i] == 'r'){if(hash['c'] > 0){hash['c']--;hash['r']++;}else{return -1;}}else if(croakOfFrogs[i] == 'o'){if(hash['r'] > 0){hash['r']--;hash['o']++;}else{return -1;}}else if(croakOfFrogs[i] == 'a'){if(hash['o'] > 0){hash['o']--;hash['a']++;}else{return -1;}}else if(croakOfFrogs[i] == 'k'){if(hash['a'] > 0){hash['a']--;hash['k']++;}else{return -1;}}}if(hash['c'] > 0 || hash['r'] > 0 || hash['o'] > 0 || hash['a'] > 0)return -1;elsereturn hash['k'];}
};

这个写法不太好,可以在用一个哈希表来存储这个字符及其对应的下标。

class Solution 
{
public:int minNumberOfFrogs(string croakOfFrogs) {string ret = "croak";int n = ret.size();vector<int> hash(n);//用数组来模拟哈希表unordered_map<char,int> index;//当前字符的下标for(int i = 0; i < n; i++)//映射下标{index[ret[i]] = i;}for(auto e : croakOfFrogs){if(e == 'c'){if(hash[n - 1] != 0)hash[n - 1]--;hash[0]++; }else{int i = index[e];if(hash[i - 1] != 0){hash[i - 1]--;hash[i]++;}elsereturn -1;}}for(int i = 0; i < n - 1; i++){if(hash[i] != 0)return -1;}return hash[n - 1];}
};

相关文章:

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...