算法 | 模拟

news2024/11/22 18:29:03

目录

替换所有的问号 

题解:

提莫攻击

 题解:

Z字形变换

题解:

外观数列

题解:

数青蛙

题解:


替换所有的问号 

1576. 替换所有的问号 - 力扣(LeetCode)icon-default.png?t=O83Ahttps://leetcode.cn/problems/replace-all-s-to-avoid-consecutive-repeating-characters/description/

题解:

遍历字符串,找到字符串中的 ?,把 ?替换成字母,且替换后的字母不能和 ?的前一个字符和后一个字符相同。

这道题主要是边界的处理,如果字符串的第一个字符为 ?,那么替换后的字符只需要和后一个字符不相同,如果字符串的最后一个字符为 ?,替换后的字符只需要和前一个字符不相同否则会越界访问

下面的 if 写的很妙,很好的处理了边界情况!

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++)//26个字母逐个尝试
                {
                    if((i==0 || s[i-1]!=ch)&&(i==n-1 || s[i+1]!=ch))//与前一个、后一个字母均不相等
                    {
                        s[i]=ch;
                        break;
                    }
                }
            }
        }
        return s;
    }
};

提莫攻击

495. 提莫攻击 - 力扣(LeetCode)icon-default.png?t=O83Ahttps://leetcode.cn/problems/teemo-attacking/description/

 题解:

主要还是处理边界,不要越界访问了!

class Solution {
public:
    int findPoisonedDuration(vector<int>& timeSeries, int duration) {
        int n=timeSeries.size();
        int ret=0;
        for(int i=1;i<n;i++)
        {
            //在中毒影响结束前再次攻击
            if(timeSeries[i]-timeSeries[i-1]<=duration) ret+=(timeSeries[i]-timeSeries[i-1]);
            else ret+=duration;//在中毒影响结束后攻击
        }
        ret+=duration;//需要判断最后一次攻击的中毒时间
        return ret;
    }
};

Z字形变换

6. Z 字形变换 - 力扣(LeetCode)icon-default.png?t=O83Ahttps://leetcode.cn/problems/zigzag-conversion/description/

题解:

本题只需要找出 Z 字形变换的规律就可以得到解。

Z字形变换后,观察第一行和最后一行的下标,发现下标的间隔都是固定的,

间隔 d = 2*numRows-2

观察Z字形变换后的中间 k 行,发现在每一行中,它们是间隔着有规律的,是间隔着递增的,

比如 numRows=3 时,在第2行中,1+3=4=d,5=1+d,7=3+d,9=5+d,11=7+d

numRows=4 时,在第 2 行中,1+5=6=d,7=1+d,11=5+d,13=7+d

                            在第 3 行中,2+4=6=d,8=2+d,10=4+d


 ​​首先我们需要找到第 k 行( k 从 1 开始)的两个起始下标 i 和 j,i+j = d,而 i = k,则 j = d-k,之后 i +=d , j += d,注意边界的处理!

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)
            {
                //注意for循环的条件判断为或
                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. 外观数列 - 力扣(LeetCode)icon-default.png?t=O83Ahttps://leetcode.cn/problems/count-and-say/description/

题解:

这道题主要是理解题目的意思。

给了一个初始字符串 1,按照 “ 1 个 1 ”,把字符串压缩为 “ 11 ”,再继续按照 “ 2 个 1”,把字符串压缩为 “ 21 ”,继续按照 “ 1 个 2 ,1 个 1 ” ,把字符串压缩为 “ 1211 ”,以此类推即可。

用双指针来遍历字符串,找出相同数字的个数即可。

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

数青蛙

1419. 数青蛙 - 力扣(LeetCode)icon-default.png?t=O83Ahttps://leetcode.cn/problems/minimum-number-of-frogs-croaking/description/

题解:

这道题的意思就是 croak 这个单词会在字符串中交叉着出现,但是字符串里面一定只有 croak 这五个字母,否则就是无效的字符串。

我们遍历字符串:

  • 如果出现的是 c,那么需要判断它是由一只新的青蛙唱的,还是可以由已经唱完的青蛙来唱,唱完的青蛙上一次唱的一定是 k,所以如果 k 的次数不为 0,那么就可以由已经唱完的青蛙来唱,否则就只能由一只新的青蛙来唱。
  • 如果出现的是  r、o、a、k,那么则需要判断它们的前驱字符有没有唱,如果唱过了,说明字符串的 croak 没有缺字母,如果没唱过,则说明 croak 缺字母了,字符串是无效的,返回 -1。
  • 利用数组来标记字符有没有唱过,唱过了就标记唱过的次数,没唱过就是 0.

    代码主要学习用数组和哈希表建立一个映射关系,映射关系如下:

class Solution {
public:
    int minNumberOfFrogs(string croakOfFrogs) {
        string t="croak";
        int n=t.size();
        vector<int> hash(n);//哈希表,记录字母出现的次数
        unordered_map<char,int> index;
        for(int i=0;i<n;i++)
            index[t[i]]=i;//c->0,r->1,o->2,a->3,k->4
        for(auto x:croakOfFrogs)
        {
            if(x=='c')
            {
                if(hash[n-1]!=0)    hash[n-1]--;
                hash[0]++;
            }
            else
            {
                int i=index[x];
                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/2196067.html

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

相关文章

AFSim仿真系统 --- 系统简解_03( Warlock模块 - 人在环路 在仿真领域中指的是AFSIM的操作员互动可视化应用程序)

我们就用保留单词 Warlock Warlock&#xff08;在仿真领域中指的是AFSIM的操作员互动可视化应用程序--人在环路 &#xff09; Warlock是AFSIM的操作员环环相扣&#xff08;Operator-in-the-Loop&#xff09;视觉应用程序。它提供了一个图形环境&#xff0c;用于在运行时查看和…

【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL45

异步FIFO 描述 请根据题目中给出的双口RAM代码和接口描述&#xff0c;实现异步FIFO&#xff0c;要求FIFO位宽和深度参数化可配置。 电路的接口如下图所示。 双口RAM端口说明&#xff1a; 端口名 I/O 描述 wclk input 写数据时钟 wenc input 写使能 waddr input 写…

Qt程序国际化

目录 程序的国际化 第一步&#xff1a;生成ts文件 第二步&#xff1a;生成并加载qm文件 程序的国际化 第一步&#xff1a;生成ts文件 Ts文件格式上实际是xml&#xff0c;记录界面的字符和代码中tr包含的字符的具体位置&#xff08;文件位置&#xff0c;行号列号等&#xff0…

QT 实现图片查看工具

QT 实现图片查看工具 1、选择图像文件 单文件选择 QFileDialog::getOpenFileName多文件选择 QFileDialog::getOpenFileNamesQList<QString> imageNames = QFileDialog::getOpenFileNames(this,tr("打开图片"),"",tr("图片文件 (*.png *.jpg *.b…

【STM32 Blue Pill编程实例】-OLED显示DHT22传感器数据

OLED显示DHT22传感器数据 文章目录 OLED显示DHT22传感器数据1、DHT22介绍2、硬件准备与接线3、模块配置3.1 定时器配置3.2 DHT22引脚配置3.3 OLED配置4、代码实现在本文中,我们将介绍如何将 DHT22 温度和湿度传感器与 STM32 Blue Pill 开发板连接,并使用 HAL 库在 STM32CubeI…

车载音频焦点(二)

目录 1 可延迟的音频焦点 2 多音频区焦点管理 3 HAL 音频焦点 4 OEM 车载音频焦点服务 1 可延迟的音频焦点 在 Android 11 中,AAOS 开始支持请求获得可延迟的音频焦点。 当非瞬态焦点请求 与 当前焦点持有者交互 遭到拒绝时,前者可以延迟。 一旦焦点的变化导致延迟的请…

各省份自然灾害损失造成的直接经济损失数据(2009-2022年)

自然灾害是自然演变过程中不可避免的现象&#xff0c;它们对人类社会构成了巨大的威胁。中国作为一个自然灾害频发的国家&#xff0c;面临着种类繁多的灾害挑战&#xff0c;包括气象灾害、地质灾害、海洋灾害、生物灾害和森林草原火灾等。 数据来源&#xff1a;《中国环境统计…

数据分布过于集中 怎么办,python 人工智能 ,数据分析,机器学习pytorch tensorflow ,

数据分布过于集中&#xff0c;意味着数据的大部分值都聚集在某个特定区间内&#xff0c;这可能会导致统计分析的结果不够稳健&#xff0c;或者模型训练时出现过拟合等问题。针对这种情况&#xff0c;可以考虑以下几种方法来处理&#xff1a; 变换成 1. **数据转换**&#xff1…

笔记-stm32移植ucos

文章目录 一、UCOS的基础知识1.1 前后台系统:1.2 RTOS系统可剥夺型内核:前后台系统和RTOS系统 1.3 UCOS系统简介学习方法 二、ucossii移植Step1&#xff1a;在工程中建立存放UCOSS代码的文件夹UCOSIIStep2:向CORE文件夹添加文件Step3:向Config文件夹添加文件Step4:向port文件夹…

Knife4j-SpringBoot3-OpenAPI3:基本使用、生产环境关闭接口文档、配置文件、配置接口文档描述信息、OpenAPI3注解

版本&#xff1a; SpringBoot&#xff1a;3.3.3 Knife4j&#xff1a;4.5.0 创建时间&#xff1a;2024-10-08 一、官网 Knife4j 的 SpringBoot3 官方说明文档&#xff1a; https://doc.xiaominfo.com/docs/quick-start#spring-boot-3 springdoc官网&#xff1a;https://spring…

笔试强训day33

跳台阶扩展问题 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。 数据范围&#xff1a;1≤n≤201≤n≤20 进阶&#xff1a;空间复杂度 O(1)O(1) &#xff0c; 时间复杂度 O(1)O(1) 输入…

【EXCEL数据处理】000017 案例 保姆级教程,附多个操作案例。EXCEL Match和Index函数。

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000017 案例 保姆级教程&#xff0c;附多个操作案例。…

MYSQL 事物隔离级别的区别与现象

事物的ACID属性本章不再赘述&#xff0c;本章主要描述事物的隔离级别及隔离级别导致的现象&#xff0c;日常工作中该如何选择MYSQL的隔离级别。 MYSQL事物的隔离级别及各隔离级别存在的问题如下&#xff1a; 隔离级别/问题脏读不可重复读幻读读未提交(Read-Uncommitted)✅✅✅…

JS 入门

文章目录 JS 入门一、JS 概述1、JS 特点2、JS 组成3、JS 初体验4、HTML引入JS 二、JS 基础语法1、变量声明2、基本数据类型3、引用数据类型1&#xff09;数组2&#xff09;对象3&#xff09;函数4&#xff09;null 4、运算符5、条件判断6、循环语句 三、JS 函数0、JS 函数特点1…

知识图谱入门——11:构建动态图谱渲染应用:Vue3与Neo4j的集成与实践

在知识图谱与大数据技术领域&#xff0c;构建动态图谱是一项非常重要的任务。这篇博客将带你深入了解如何利用Vue.js、D3.js以及Neo4j&#xff0c;开发一个能够实时渲染图谱节点和关系的应用。我们将从零开始&#xff0c;介绍如何搭建开发环境、安装依赖、与Neo4j数据库交互、到…

获取yolov8自带的数据集并开始训练

今天小编带大家学习一下YOLOv8 配置文件&#xff0c;用来定义不同数据集的参数和配置。这些文件包含了关于每个数据集的路径、类别数、类别标签等信息&#xff0c;帮助模型正确地加载和解析数据集&#xff0c;以便进行训练和推理。 具体来说&#xff0c;这些 YAML 文件的作用如…

各省份技术市场成交额数据(2001-2022年)

数据名称&#xff1a;各省份技术市场成交额数据数据年份&#xff1a;2001-2022年数据来源&#xff1a;《中国统计年鉴》字段说明&#xff1a; id&#xff1a;数据条目编号省份&#xff1a;中国各省份年份&#xff1a;2001-2022年技术市场成交额(万元)&#xff1a;表示该省份在特…

基于Springboot vue的流浪狗领养管理系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…

Win10 IDEA连接虚拟机中的Hadoop(HDFS)

获取虚拟机的ip 虚拟机终端输入 ip a关闭虚拟机防火墙 sudo ufw disable修改Hadoop的core-site.xml文件 将localhost修改为虚拟机局域网IP # 位置可能不一样&#xff0c;和Hadoop安装位置有关 cd /usr/local/hadoop/etc/hadoop vim core-site.xmlIDEA 连接 创建Maven项目…

软考系统分析师知识点四:操作系统基本原理

前言 今年报考了11月份的软考高级&#xff1a;系统分析师。 考试时间为&#xff1a;11月9日。 倒计时&#xff1a;33天。 目标&#xff1a;优先应试&#xff0c;其次学习&#xff0c;再次实践。 复习计划第一阶段&#xff1a;扫平基础知识点&#xff0c;仅抽取有用信息&am…