C++ 模拟OJ

目录

1、1576. 替换所有的问号

2、 495. 提莫攻击

3、6. Z 字形变换

4、38. 外观数列

5、 1419. 数青蛙


1、1576. 替换所有的问号

思路:分情况讨论

  • ?zs:左边没有元素,则仅需保证替换元素与右侧不相等;
  • z?s:左右都有元素,则问号两侧都需要保证替换元素与其不相等;
  • zs? :右边没有元素,则仅需保证替换元素与左侧不相等。
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;
    }
};

2、 495. 提莫攻击

思路:分情况讨论

相邻两次受到攻击的时间差与中毒持续时间进行比较,时间差大于等于中毒持续时间,则可以收到完整中毒时长,否则只能接受到时间差的中毒时长。

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

3、6. Z 字形变换

思路:画图找规律

示例解释

以 "PAYPALISHIRING" 为例,numRows = 3 时,周期 d = 4

  • 第一行字符:P(0),A(4),H(8),N(12)
  • 第二行字符:A(1),P(3),L(5),S(7),I(9),I(11),G(13)
  • 第三行字符:Y(2),I(6),R(10)

按行读取这些字符后得到的新字符串是 "PAHNAPLSIIGYIR"。

  1. 特殊情况处理:如果 numRows 为 1,则不需要进行任何变换,直接返回原字符串 s

  2. 周期计算:整个 Z 字形排列的一个循环周期 d 是 2 * numRows - 2。这个周期是由于从上到下再到上的一个完整循环所包含的字符数量。例如,当 numRows 为 3 时,d 为 4。

  3. 第一行的字符添加:第一行的字符在原字符串中的位置就是周期 d 的倍数,即 0, d, 2d, ...

  4. 中间行的字符添加

    • 对于中间的每一行,每个周期内都有两个字符需要被添加到结果字符串中。第一个字符的位置是周期起始位置加行数,第二个字符的位置是周期结束位置减行数。
    • 具体来说,对于行 k(从 0 开始计数),在周期 i 中,第一个字符的位置是 i + k,第二个字符的位置是 i + d - k
    • 注意,每次添加第二个字符时需要检查其位置是否超出了原字符串的长度。
  5. 最后一行的字符添加:最后一行的字符在原字符串中的位置是周期起始位置加 numRows - 1,即 numRows - 1, numRows - 1 + d, numRows - 1 + 2d, ...

  6. 返回结果:按照上述规则,将所有行的字符依次添加到结果字符串 ret 中后,返回 ret

class Solution {
public:
    string convert(string s, int numRows) {
        if (numRows == 1)
            return s;
        string ret;
        int d = 2 * numRows - 2;
        int n = s.size();
        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) {
                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. 外观数列

思路:外层遍历数组元素,内层使用双指针寻找相同字符区间,区间相减就是相同字符的个数,区间左端点就是字符。

class Solution {
public:
    string countAndSay(int n) {
        string ret = "1";
        for (int i = 1; i < n; i++) {
            string tmp;
            int n = ret.size();
            for (int left = 0, right = 0; right < n;) {
                while (right < n && ret[left] == ret[right])
                    right++;
                tmp += to_string(right - left) + ret[left];
                left = right;
            }
            ret = tmp;
        }
        return ret;
    }
};

5、 1419. 数青蛙

思路:

  • 计数逻辑:通过追踪每个 "croak" 中字符的状态,确保蛙鸣声的顺序正确无误。
  • 顺序检测:确保每个蛙鸣声都是按照正确的顺序 "croak" 发出的。
  1. 初始化变量:

    • s = "croak":定义了一个青蛙蛙鸣的顺序。
    • n = s.size():蛙鸣声 "croak" 的长度,这里是5。
    • hash:一个大小为5的向量(数组),用于追踪 "croak" 中每个字母的状态。
    • index:一个哈希表(unordered_map),用于映射每个字符到它在 "croak" 中的索引。
  2. 处理字符串:

    • 遍历输入的 croakOfFrogs 字符串中的每个字符。
    • 如果字符是 'c',表示一个新的蛙鸣声开始。如果在 hash 的最后一个位置(对应 'k' 字符的位置)有计数,表示有一个青蛙完成了蛙鸣,可以开始新的蛙鸣,因此减少 'k' 的计数,并增加 'c' 的计数。
    • 对于 'r', 'o', 'a', 'k' 之外的 'c',需要检查前一个字符是否已经存在(即前一个状态的计数是否大于0)。如果是,将前一个字符的计数减1,当前字符的计数加1。如果不是,表示蛙鸣声的顺序被打断了,返回 -1。
  3. 验证和返回结果:

    • 遍历 hash 向量,检查 'c', 'r', 'o', 'a' 的计数是否都为0。如果这些位置的计数不为0,表示有蛙鸣声没有完成,返回 -1。
    • 如果所有 'c', 'r', 'o', 'a' 的计数都为0,最后返回 'k' 的计数,即为所需的最少青蛙数量。
class Solution {
public:
    int minNumberOfFrogs(string croakOfFrogs) {
        string s = "croak";
        int n = s.size();
        vector<int> hash(n);
        unordered_map<char, int> index;
        for (int i = 0; i < n; i++)
            index[s[i]] = i;
        for (auto c : croakOfFrogs) {
            if (c == 'c') {
                if (hash[n - 1] != 0)
                    hash[n - 1]--;
                hash[0]++;
            } else {
                int i = index[c];
                if (hash[i - 1] == 0)
                    return -1;
                hash[i - 1]--;
                hash[i]++;
            }
        }
        for (int i = 0; i < n - 1; i++) {
            if (hash[i] != 0)
                return -1;
        }
        return hash[n - 1];
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年【起重机械指挥】考试及起重机械指挥考试报名

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 起重机械指挥考试是安全生产模拟考试一点通总题库中生成的一套起重机械指挥考试报名&#xff0c;安全生产模拟考试一点通上起重机械指挥作业手机同步练习。2024年【起重机械指挥】考试及起重机械指挥考试报名 1、【多…

行列式错题本

《1800》 1 阶数和转置 A是三阶,B是4阶,还有2这个系数 2 怎么啥也不会呀,委屈 行列式的拆分+提取系数 3

【NR 定位】3GPP NR Positioning 5G定位标准解读(四)

目录 前言 6 Signalling protocols and interfaces 6.1 支持定位操作的网络接口 6.1.1 通用LCS控制平面架构 6.1.2 NR-Uu接口 6.1.3 LTE-Uu接口 6.1.4 NG-C接口 6.1.5 NL1接口 6.1.6 F1接口 6.1.7 NR PC5接口 6.2 终端协议 6.2.1 LTE定位协议&#xff08;LPP&#x…

机器学习模型总结

多元线性回归&#xff08;linear regression&#xff09; 自变量&#xff1a;连续型数据&#xff0c;因变量&#xff1a;连续型数据 选自&#xff1a;周志华老师《机器学习》P53-55 思想&#xff1a;残差平方和达到最小时的关系式子即为所求&#xff0c;残差平方和&#xff1a…

考研英语语法(句子成分)

目录 1.主句的成分&#xff1a; 2.化妆后句子的成分&#xff1a; 3.句子的基本结构&#xff1a; 4.句子成分表 5.复杂句型总结 1.并列句&#xff08;是由并列连词连接两个或两个以上的句子&#xff0c;用逗号隔开&#xff09; 2.名词性从句&#xff08;名词在句中充当成…

加密与安全_探索常用编码算法

文章目录 概述什么是编码编码分类ASCII码 &#xff08;最多只能有128个字符&#xff09;Code&#xff1a; 字符转换成ascii码ASCII码对照表 Unicode &#xff08;用于表示世界上几乎所有的文字和符号&#xff09;URL编码 &#xff08;解决服务器只能识别ASCII字符的问题&#x…

【数据结构】复杂度详解

目录 &#xff08;一&#xff09;算法的复杂度 &#xff08;二&#xff09;时间复杂度 &#xff08;1&#xff09;练笔解释&#xff1a; i&#xff0c;示例1 ii&#xff0c;示例2 iii&#xff0c;二分查找 iv&#xff0c;斐波那契 &#xff08;三&#xff09;空间复杂度…

带使能控制的锂电池充放电解决方案

一、产品概述 TP4594R 是一款集成线性充电管理、同步升压转换、电池电量指示和多种保护功能的单芯片电源管理 SOC&#xff0c;为锂电池的充放电提供完整的单芯片电源解决方案。 TP4594R 内部集成了线性充电管理模块、同步升压放电管理模块、电量检测与 LED 指示模块、保护模块…

企业指标体系建设与管理:运用MECE原则与战略地图,打造完美闭环

在数字化时代&#xff0c;数据已经成为企业的核心资产。为了更好地利用这些数据&#xff0c;企业需要建立一套科学、完整、高效的指标体系。而在这个过程中&#xff0c;MECE原则&#xff08;Mutually Exclusive, Collectively Exhaustive&#xff0c;即“相互独立&#xff0c;完…

day04-Maven-SpringBootWeb入门

文章目录 01. Maven1.1 课程安排1.2 什么是Maven1.3 Maven的作用1.4 Maven模型1.5 Maven仓库1.6 Maven安装1.6.1 下载1.6.2 安装步骤 2 IDEA集成Maven2.1 配置Maven环境2.1.1 当前工程设置2.1.2 全局设置 2.2 创建Maven项目2.3 POM配置详解2.4 Maven坐标详解2.5 导入Maven项目 …

探索Ubuntu命令行:常见问题与解决方案

一、引言 Ubuntu&#xff0c;作为一款流行的Linux发行版&#xff0c;其命令行界面&#xff08;CLI&#xff09;为用户提供了丰富的功能和灵活性。然而&#xff0c;对于新手来说&#xff0c;命令行可能会带来一些挑战。本文将探讨一些在使用Ubuntu命令行时可能遇到的问题及其解决…

#QT(DEMO)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;打印"hello wolrd" 3.记录 &#xff08;1&#xff09;创建一个新工程&#xff1a; 新建好一个工程存放文件夹&#xff08;路径不能有中文&#xff09;,然后按下图配置 &#xff08;2&#xff09;点击widgets.ui拖入以…

数学建模【多元线性回归模型】

一、多元线性回归模型简介 回归分析是数据分析中最基础也是最重要的分析工具&#xff0c;绝大多数的数据分析问题&#xff0c;都可以使用回归的思想来解决。回归分析的任务就是&#xff0c;通过研究自变量X和因变量Y的相关关系&#xff0c;尝试去解释Y的形成机制&#xff0c;进…

一篇了解电阻的使用

目录 一、电阻理论基础 1.电阻的定义 2.欧姆定律 3.电阻决定式 4.电阻的串并联​编辑 5.电阻的功率 6.温度对电阻的影响 二、电阻的选型 1.安装方式 2.电阻值 &#xff08;1&#xff09;电阻值的标称 &#xff08;2&#xff09;电阻值的确定 &#xff08;3&#x…

图片上的物品怎么抠出来?这三种方法教你快速消除

怎么把图片上的物品抠出来&#xff1f;这是一个在设计、摄影和后期制作中经常遇到的问题。在很多设计项目中&#xff0c;我们可能需要从一张图片中扣出某个物品&#xff0c;以便在其他背景中使用&#xff0c;或者将其与其他图像组合在一起。今天&#xff0c;我们就来分享三种常…

力扣刷题记录--463. 岛屿的周长

题目链接&#xff1a;463. 岛屿的周长 - 力扣&#xff08;LeetCode&#xff09; 题目描述 我的代码实现 class Solution {public int islandPerimeter(int[][] grid) { int result0; int rowgrid.length; int colgrid[0].length; for(int i0;i<row;i){for(int j0;j<col…

FPGA时序约束与分析--数据到达路径和数据需求路径

文章目录 前言一、定义二、时序模型三、公式推导前言 时序约束的定义–设计者根据实际的系统功能,通过时序约束的方式提出时序要求; FPGA 编译工具根据设计者的时序要求,进行布局布线;编译完成后, FPGA 编译工具还需要针对布局布线的结果,套用特定的时序模型( FPGA 器件…

Git 初试 安装

Git初识 遇到问题&#xff1a; 在生活和学习中&#xff0c;我们会遇到这样的问题&#xff0c;比如上交论文的时候&#xff0c;老师让你改了一遍又一遍&#xff0c;结果改到最后一版的时候&#xff0c;说你这个还不如你第一版的或者前几版的&#xff0c;老师又说&#xff0c;把…

美女街拍3000张高清图

美女街拍3000张高清图&#xff0c;需要的可以直接下载 2.资源下载 ​途径一&#xff1a;点击以下链接直接下载 美女街拍3000张高清图 途径二&#xff1a;直接长按住以下图片识别进去下载即可

揭秘App访问量背后的秘密:数据统计与分析

在移动互联网时代&#xff0c;App已成为人们日常生活的重要组成部分。对于App运营者来说&#xff0c;了解用户的访问量、行为习惯等数据至关重要。本文将深入探讨如何精准统计App访问量&#xff0c;为运营者提供有价值的数据支持。 一、App访问量统计的重要性 访问量是衡量A…