C++ 模拟OJ

news2024/11/25 4:19:50

目录

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];
    }
};

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

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

相关文章

C语言:结构体(自定义类型)知识点(包括结构体内存对齐的热门知识点)

和黛玉学编程呀&#xff0c;大家一起努力呀............. 结构体类型的声明 回顾一下 struct tag { member-list; }variable-list; 创建和初始化 我们知道&#xff0c;在C语言中&#xff0c;对于一些数据是必须初始化的&#xff0c;但是结构体怎么创建并且初始化呢&#xff1…

绘图机器 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 绘图机器的绘图笔初始位置在原点&#xff08;0, 0&#xff09;&#xff0c;机器启动后其绘图笔按下面规则绘制直线&#xff1a; 1&#xff09;尝试沿着横向坐标轴…

基于51单片机的智能睡眠呼吸检测系统[proteus仿真]

基于51单片机的智能睡眠呼吸检测系统[proteus仿真] 呼吸检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于51单片机的智能睡眠呼吸检测系统[proteus仿真] 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文…

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

前言 3GPP 标准网址&#xff1a;Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;一&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;二&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位…

远程调用--webClient

远程调用webClient 前言1、创建webClient2、准备数据3、执行请求4、接收返回响应到的数据整体代码 前言 非阻塞、响应式HTTP客户端 1、创建webClient WebClient client WebClient.create();2、准备数据 Map<String,String> params new HashMap<>();params.pu…

【Python】Python教师/学生信息管理系统 [简易版] (源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

#WEB前端

1.实验&#xff1a;vscode安装&#xff0c;及HTML常用文本标签 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; &#xff08;1&#xff09;网页直接搜索安装vscode &#xff08;2&#xff09;打开vscode&#xff0c;在下图分别安装以下插件&#xff1a; Html Css Support …

《TCP/IP详解 卷一》第10章 UDP 和 IP 分片

目录 10.1 引言 10.2 UDP 头部 10.3 UDP校验和 10.4 例子 10.5 UDP 和 IPv6 10.6 UDP-Lite 10.7 IP分片 10.7.1 例子&#xff1a;IPV4 UDP分片 10.7.2 重组超时 10.8 采用UDP的路径MTU发现 10.9 IP分片和ARP/ND之间的交互 10.10 最大UDP数据报长度 10.11 UDP服务器…

5G网络架构与组网部署01--5G网络架构的演进趋势

目录 1. 5G网络架构的演进趋势 1.1 5G移动通信系统整体架构 1.2 4G移动通信系统整体架构 1.3 4G与5G移动通信系统整体架构对比 1.4 核心网架构演进 1.5 无线接入网演进 1. 整体架构组成&#xff1a;接入网&#xff0c;核心网 2. 5G网络接入网和核心网对应的网元&#xff…

判断回文字符串

判断回文字符串 题目描述&#xff1a;解法思路&#xff1a;解法代码&#xff1a;运行结果&#xff1a; 题目描述&#xff1a; 输入⼀个字符串&#xff0c;判断这个字符串是否是回文字符串&#xff08;字符串的长度小于等于30&#xff0c;字符串不包含空格&#xff09;&#xf…

【力扣精选算法100道】——判定是否互为字符重排(哈希专题)

目录 &#x1f6a9;了解题意 &#x1f6a9;算法原理 第一种&#xff1a;排序 第二种方法&#xff1a;哈希 &#x1f6a9;实现代码 面试题 01.02. 判定是否互为字符重排 - 力扣&#xff08;LeetCode&#xff09; &#x1f6a9;了解题意 我们输入俩个字符串&#xff0c;当俩…

FPGA时序约束与分析--建立时间与保持时间

文章目录 前言一、定义二、举例说明2.1 建立时间违规2.2 保持时间违规前言 时序约束的定义–设计者根据实际的系统功能,通过时序约束的方式提出时序要求; FPGA 编译工具根据设计者的时序要求,进行布局布线;编译完成后, FPGA 编译工具还需要针对布局布线的结果,套用特定的…

基于SSM的农业电商服务系统(农产品销售管理系统)(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的农业电商服务系统&#xff08;农产品销售管理系统&#xff09;&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#…

【Python】批量读取文件夹中的excel文件

示例展示 代码 import os import pandas as pd folder_path r"C:\Users\admin\Desktop\excelfile" extension"xlsx" files [file for file in os.listdir(folder_path) if file.endswith(. extension)] for file in files:filepath os.path.join(folde…

嵌入式基础知识-信号量,PV原语与前趋图

本篇来介绍信号量与PV原语的一些知识&#xff0c;并介绍其在前趋图上的应用分析。本篇的知识属于操作系统部分的通用知识&#xff0c;在嵌入式软件开发中&#xff0c;同样会用到这些知识。 1 信号量 信号量是最早出现的用来解决进程同步与互斥问题的机制&#xff08;可以把信…

Spring Boot2.2.4版本启动项目时,访问登录接口显示页面不存在

问题触发场景&#xff1a;IDEA 2023.3.4 SpringBoot 2.2.4 上面4张图片分别是项目结构、Spring Boot启动配置、SpringMVC配置和页面展示在项目中存放的位置&#xff0c;表面上看上去没有太大问题&#xff0c;项目应该会达到预期结果&#xff0c;但是bug总是在不经意间出现&…

华为路由器QOS限速实验

此配置只适合分配好VLAN的各项业务&#xff0c;例如&#xff1a;vlan10是视频业务&#xff0c;vlan20是语音业务等。 1.配置流分类 [ar1]traffic classifier c1 operator and [ar1-classifier-c1]if-match vlan-id 10 [ar1-classifier-c1]q [ar1]traffic classifier c2 oper…

nginx-图片模块

./configure --with-http_image_filter_module location / {root html;index index.html index.htm;if ($arg_w "") {set $arg_w -;}if ($arg_h "") {set $arg_h -;}image_filter resize $arg_w $arg_h;image_filter_jpeg_quality 95; } 访问: 1234…

进程间通信之消息队列及共享内存

1.IPC对象: 内存文件 1.ipcs 查看系统重的消息队列、共享内存、信号灯的信息 2.ipcrm 删除消息队列、共享内存、信号灯 ipcrm -Q/-M/-S key ipcrm -q/-m/-s 消息队列ID/共享内存ID/信号灯ID 消息队列&#xff1a; 3.操作流程: …

Three.js--》探寻Cannon.js构建震撼的3D物理交互体验(一)

我们用three.js可以绘制出各种酷炫的画面&#xff0c;但是当我们想要一个更加真实的物理效果的话&#xff0c;这个时候我们就需要一个物理的库&#xff0c;接下来我们就讲解一下今天要学习的canon&#xff0c;它可以给我们提供一个更加真实的物理效果&#xff0c;像物体的张力、…