算法专题六:模拟

news2024/11/20 11:39:31

一.替换所有的问号

在这里插入图片描述

替换所有的问号

1.思路一

在这里插入图片描述

class Solution {
public:
    string modifyString(string s) {
        for(int i=0;i<s.size();i++)
        {
            if(s[i] == '?')
            {
                    for(char j = 'a' ; j<='z' ; j++)
                {
                    //1.注意数组越界
                    if((i==0 || s[i-1] != j) && (i==s.size()-1 || s[i+1] != j))
                    {
                        s[i] = j;
                        break;
                    }
                }
            }
            
        }
        return s;
    }
};

2.GIF题目解析

请添加图片描述

二.提莫攻击

在这里插入图片描述
提莫攻击

1.思路一

在这里插入图片描述

class Solution {
public:
    int findPoisonedDuration(vector<int>& timeSeries, int duration) {
        int time = 0;
        for(int i=1;i<timeSeries.size();i++)
        {
            int time_grep = timeSeries[i] - timeSeries[i-1];
            //1.时间超过
            if(time_grep >= duration)
            {
                time += duration;
            }
            //2.时间没有超过
            else
            {
                time += time_grep;
            }
        }
        //3.最后一次攻击一定会走完!
        time += duration;

        return time;
    }
};

三.N字型变换

1.思路一:模拟

在这里插入图片描述

class Solution {
public:
    string convert(string& s, int numRows) {
        //0.只有一行
        if (numRows == 1)
            return s;
        //1.构建二维数组
        vector<string> vv(numRows);
        //2.字符排放
        int flag = 1;
        int a = 0;
        int b = numRows - 2;
        for (int i = 0; i < s.size(); i++)
        {
            //2-1:从上往下
            if (flag == 1)
            {
                if (a <= numRows - 1)
                {
                    vv[a] += s[i];
                    a++;
                }
                if (a == numRows)
                {
                    if(numRows >= 3)
                        a = 0, flag = -1;
                    a = 0;
                }
            }
            //2-2:从下往上
            else
            {
                if (b >= 0)
                {
                    vv[b] += s[i];
                    b--;
                }
                if (b == 0)
                    b = numRows-2, flag = 1;
            }
        }
        //3.定义字符串类型进行+=
        string ret;
        for (int i = 0; i < numRows; i++) ret += vv[i];
        return ret;
    }
};

2.思路二:找规律进行优化

在这里插入图片描述

class Solution{
public:
    string convert(string s, int numRows) {
        //0.特殊情况判断:
        if (numRows == 1)
            return s;
        //1.计算公差
        int d = (2 * numRows) - 2;
        int n = s.size();
        //2.规律去模拟不需要创建额外的空间:
        string ret;
        for (int i = 0; i < numRows; i++)
        {
            //1.第一行字符
            if (i == 0)
                for (int i_1 = 0; i_1 < n; i_1 += d) ret += s[i_1];
            //2.最后一行字符
            else if (i == numRows - 1)
                for (int i_n = numRows - 1; i_n < n; i_n += d) ret += s[i_n];
            //3.中间字符:左在右不在特殊情况
            else
                for (int i_k_left = i, i_k_right = d - i; (i_k_left < n) || (i_k_right < n); i_k_left += d, i_k_right += d)
                {
                    if(i_k_left < n )
                        ret += s[i_k_left];
                    if(i_k_right < n)
                        ret += s[i_k_right];
                }
        }

        return ret;
    }
};

//时间复杂度:O(n)
//空间复杂度:O(1)

四.外观数列

在这里插入图片描述
外观数列

1.思路一:模拟

在这里插入图片描述

class Solution {
public:
    string countAndSay(int n) {
        //1.开始字符串:
        string ret("1");
        //2.内容的遍历:
        while (--n)
        {
            int left = 0, right = 0;
            string s1;
            //3.字符串的遍历+数据更新
            for (left = 0, right = 0; right < ret.size(); right++)
            {
                if (ret[right] != ret[left])
                {
                    int n = (right - left ) * 10 + (int)(ret[left] - '0');
                    //1.数据保存一下:
                    s1 += to_string(n);
                    //2.指针数值更新
                    left = right;
                }
            }
            //4.数据都不去走for中的if产生的问题。
            int n = (right - left) * 10 + (int)(ret[left] - '0');
            s1 += to_string(n);
            
            ret = s1;
        }
        return ret;
    }
};

五.数青蛙

在这里插入图片描述
数青蛙

1.思路一:模拟+哈希记录数据

在这里插入图片描述

class Solution {
public:
    int minNumberOfFrogs(string croakOfFrogs) {
        //1.哈希表记录数据
        unordered_map<char, int> indx;
        vector<int> hash(5);
        //2.初始化hash的字符值?
        string s1("croak");
        //3.遍历一遍
        int n = s1.size();
        for (int i = 0; i < n; i++) indx[s1[i]] = i;
        //4.遍历字符串考虑青蛙!
        for (auto ch : croakOfFrogs)
        {
            //1.第一个c
            if (ch == 'c')
            {
                //1.k有值
                if (hash[n - 1] >= 1)
                    hash[0]++, hash[n - 1]--;
                //2.k没有值
                else if (hash[n - 1] == 0)
                    hash[0]++;
            }
            //2.正常情况:
            else
            {
                int j = indx[ch];
                if (hash[j - 1] == 0) return -1;
                hash[j - 1]--, hash[j]++;
            }
        }
        //特殊情况:结束之后应该除了k位置hash是有数值其他hash中应该是没有数值的!
        for(int i=0;i<n-1;i++)
        {
            if(hash[i]!=0)
                return -1;
        }
        return hash[n - 1];
    }
};

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

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

相关文章

为什么说上了金蝶、用友系统后,下一步是部署BI?

经常有些不熟悉BI工具的用户问我&#xff1a;金蝶、用友系统和BI工具与什么区别&#xff0c;为什么说上了金蝶、用友系统后&#xff0c;下一步就是部署BI&#xff1f;这两个系统工具的功能不重叠吗&#xff1f; 首先&#xff0c;要了解金蝶、用友系统和BI工具的各自作用。 金…

第10课 利用windows API捕获桌面图像并通过FFmpeg分享

在上一章&#xff0c;我们已经实现了一对一音视频对话功能。在实际应用中&#xff0c;我们常需要把自己的电脑桌面分享给他人以实现桌面共享功能&#xff0c;这种功能在视频会议、在线教学等场景中很常见&#xff0c;这种功能如何实现呢&#xff1f;这节课我们就来解决这个问题…

我的小学时代——一段充满乐趣与探索的旅程

我的小学时代——一段充满乐趣与探索的旅程 在我深深的回忆中&#xff0c;小学时代是一段无比珍贵且充满活力与探索的时光&#xff0c;那是我在梓潼路小学度过的五载黄金岁月&#xff0c;从1979年开始&#xff0c;我迈进了那扇标志着人生学习之旅起点的大门。 梓潼路小学作为一…

新一代爬取JavaScript渲染页面的利器-playwright(二)

接上文&#xff1a;新一代爬取JavaScript渲染页面的利器-playwright&#xff08;一&#xff09;   上文我们主要讲了Playwright的特点、安装、基本使用、代码生成的使用以及模拟移动端浏览&#xff0c;这篇我们主要讲下Playwright的选择器以及常见的操作方法。 6.选择器 我们…

使用PowerJob做任务调度模块

最近项目中使用了PowerJob做任务调度模块&#xff0c;感觉这个框架真香&#xff0c;今天我们就来深入了解一下新一代的定时任务框架——PowerJob&#xff01; 简介 PowerJob是基于java开发的企业级的分布式任务调度平台&#xff0c;与xxl-job一样&#xff0c;基于web页面实现…

宽压输入1.5KV隔离直流高压输出电源模块

GRC系列低成本小体积宽电压输入隔离高压模块电源&#xff0c;是一款业界的隔离稳压型DC-DC高电压转换器&#xff0c;可在宽范围波动的不稳定电压输入环境中运行&#xff0c;通过模块的内部调整电路可以生成隔离稳压的直流高电压输出。产品外壳采用铝壳喷塑防腐设计&#xff0c;…

RTU数据采集终端

在现代工业控制系统中&#xff0c;数据采集是一个至关重要的步骤。RTU(远程终端单元)作为一种常用的数据采集终端设备&#xff0c;不仅可以实现数据的采集和传输&#xff0c;还可以实现现场设备的远程监控和控制。 一、RTU数据采集终端的工作原理 RTU数据采集终端是一种将现场…

springboot社区养老服务系统设计与实现

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;一 、设计说明 1.1 研究背景 当…

Spring框架-入门(IOC,DI)

文章目录 Spring框架简介创建Spring项目理解IOC和DI&#xff1a;IOC控制反转示例pom.xmlPerson.javaapplicationContext.xmlPersonTest.java DI依赖注入传统的方式GreetingService.javaGreetingServiceImpl.javaGreetingTest.java 使用DI依赖注入GreetingService.javaGreetingS…

关于系统设计的一些思考

0.前言 当我们站在系统设计的起点&#xff0c;面对一个新的需求&#xff0c;我们该如何开始呢&#xff1f;这是许多处于系统分析与设计领域的新手常常思考的问题。有些人可能会误以为&#xff0c;只要掌握了诸如面向对象、统一建模语言、设计模式、微服务、Serverless、Servic…

电脑视频剪辑软件哪个好用

电脑视频剪辑软件是当今创作者不可或缺的工具之一&#xff0c;它们能够帮助我们在电脑上对视频进行编辑、剪辑、特效添加等操作&#xff0c;使我们的作品更加专业、精美。然而&#xff0c;在众多的视频剪辑软件中&#xff0c;该选择哪一个呢&#xff1f;本文将为你推荐2款非常好…

全网最细,接口+接口自动化测试面试题汇总(附回答)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、我们测试的接口…

vite 如何设置 pwa,让网页类似 app 那样运行,使用插件 vite-plugin-pwa

vite 如何设置 pwa&#xff0c;让网页类似 app 那样运行&#xff0c;使用插件 vite-plugin-pwa 一、概述 情况还是那么个情况&#xff0c;还是原来的项目 vue2 改为 vitetsvue3 遇到的问题&#xff0c;今天这个问题是如何 在 Vite 环境下设置 PWA。 PWA 就是网页应用可以像 a…

驱动芯片,预计未来几年将达到605亿美元的规模

驱动芯片是指驱动显示屏幕幕的芯片&#xff0c;其应用广泛&#xff0c;主要用于电脑、手机、电视、平板电脑和汽车等设备。全球驱动芯片市场分析&#xff1a; 据市场研究预测&#xff0c;未来几年内&#xff0c;全球驱动芯片市场将保持稳定增长&#xff0c;并达到605亿美元的规…

【萤火虫系列教程】2/5-Adobe Firefly 文字​生成​图像

文字​生成​图像 登录账号后&#xff0c;在主页点击文字生成图像的【生成】按钮&#xff0c;进入到文字生成图像 查看图像 在文字生成图像页面&#xff0c;可以看到别人生成的图像。 点击某个图像&#xff0c;就可以进入图像详情&#xff0c;可以看到文字描述。 生成图像 我…

电子化学品,预计2025年会增长到4302亿美元

电子化学品市场是一个庞大的细分市场&#xff0c;它包括了广泛的化学品种类&#xff0c;如涂料、塑料、精细化学品、农药和医药等。这个市场的发展相当迅速&#xff0c;下面我们将从全球市场和中国市场两个方面对其发展趋势进行分析。全球市场分析&#xff1a; 从全球市场的角度…

谷达冠楠:抖店创业初期需要注意哪些

随着互联网的发展&#xff0c;越来越多的人选择通过开设网店来实现创业梦想。而在众多的电商平台中&#xff0c;抖音小店因其独特的社交属性和巨大的流量优势&#xff0c;成为了许多人的首选。然而&#xff0c;抖店创业并非一帆风顺&#xff0c;初期需要注意的问题也不少。以下…

OHC堆外内存

JVM内存模型 先复习一波JVM的内存模型&#xff0c;线程共享的区域为堆、方法区|永久代&#xff0c;线程不共享的区域为栈、程序计数器。 对象创建的整体流程可以用一图描述 内存逃逸 逃逸分析是指分析指针动态范围的方法&#xff0c;它同编译器优化原理的指针分析和外形分析相…

小微企业是如何使用CRM辅助业务的?CRM功能汇总

小企业的成长取决于客户&#xff0c;因此实施有效的CRM管理系统至关重要。曾有数据机构调查发现&#xff0c;每支出1美元用于CRM&#xff0c;您的CRM将带来8、71美元的回报。难怪越来越多的企业实施CRM&#xff0c;因为它带来了高投资回报率。对小企业来说&#xff0c;CRM应该具…

pytorch08:学习率调整策略

目录 一、为什么要调整学习率&#xff1f;1.1 class _LRScheduler 二、pytorch的六种学习率调整策略2.1 StepLR2.2 MultiStepLR2.3 ExponentialLR2.4 CosineAnnealingLR2.5 ReduceLRonPlateau2.6 LambdaLR 三、学习率调整小结四、学习率初始化 一、为什么要调整学习率&#xff…