跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

算法模拟实战:替换所有问号与提莫攻击解析

通过两道 LeetCode 算法题深入讲解模拟算法的应用。替换所有问号问题要求遍历字符串,对每个问号尝试 a-z 字符替换,确保不与前后字符重复;提莫攻击问题则需计算中毒总时间,比较相邻攻击时间差与中毒持续时间,取较小值累加。两题均展示了如何通过模拟过程优化逻辑,代码实现简洁高效,适合算法学习者参考实战。

星河入梦发布于 2026/3/15更新于 2026/10/2694 浏览
算法模拟实战:替换所有问号与提莫攻击解析

前言

聚焦算法题实战,系统讲解优选算法。通过剖析动态规划、二分法等高效策略,学会寻找最优解。内容以题带点,讲解思路与代码实现,帮助大家快速提升代码能力。

1576. 替换所有的问号

题目链接: LeetCode 1576

题目描述: 题目描述

示例: 题目示例

解题思路

这道题的核心在于模拟替换过程。我们需要遍历字符串,遇到问号时,尝试用 'a' 到 'z' 的字符进行替换。关键约束是替换后的字符不能与前后相邻的字符重复。由于只需要避免重复,且字母表有 26 个字符,通常第一个不冲突的字符即可满足条件。

C++ 代码实现

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 || ch != s[i - 1]) && 
                        (i == n - 1 || ch != s[i + 1])) {
                        s[i] = ch;
                        break;
                    }
                }
            }
        }
        return s;
    }
};

笔记展示

算法笔记 算法笔记

495. 提莫攻击

题目链接: LeetCode 495

题目描述: 题目描述

示例: 题目示例

解题思路

本题采用模拟加分情况讨论的方法。核心逻辑是计算相邻两次攻击的时间差:

  1. 如果时间差大于等于中毒持续时间 duration,说明上次中毒效果已完全结束,累加完整的 duration。
  2. 如果时间差小于 duration,说明下次攻击在中毒期间提前触发,此时只累加实际的时间差。

更简洁的写法是直接累加 min(duration, 时间差),最后别忘了加上最后一次攻击带来的完整中毒时间。

C++ 代码实现

方案一:分情况判断

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

方案二:利用 min 函数简化

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

笔记展示

算法笔记 算法笔记

目录

  1. 前言
  2. 1576. 替换所有的问号
  3. 解题思路
  4. C++ 代码实现
  5. 笔记展示
  6. 495. 提莫攻击
  7. 解题思路
  8. C++ 代码实现
  9. 笔记展示

更多推荐文章

查看全部
  • OpenMV 人脸追踪算法工作原理揭秘
  • 基于 Python 和 Django 的电影推荐系统设计与实现
  • 自然语言处理在金融领域的应用与实战
  • C++ std::string 核心用法与底层原理
  • Stable Diffusion 秋叶整合包:环境配置与使用指南
  • OpenClaw 接入飞书机器人与 Kimi K2.5 配置指南
  • Android 插件化技术:动态创建 Activity 模式详解
  • OpenClaw + LMStudio + 飞书:搭建本地离线 AI 助手
  • Qt Creator 接入外部 AI 大模型配置指南
  • 点云预测作为 4D 占用预测代理(一)
  • Kafka vs RabbitMQ:消息中间件深度对比与 Java 选型实战
  • 数据结构:栈与队列的定义、核心操作与代码解析
  • C++ STL 常用容器详解与实战技巧
  • 小米智能家居 Miloco 分离式部署实战
  • Transformer 原理详解与 PyTorch 编码实现
  • JDK 22 下载安装与 Java 开发环境配置教程
  • StructBERT WebUI 权限管理扩展:RBAC 角色控制及审计日志实现
  • 利用无监督学习为大语言模型实现信息记忆与微调
  • 链表实战:队列安排与约瑟夫问题的 C++ 实现
  • Windows 10 系统性能优化指南:10 个实用技巧

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online