算法笔记(四)——模拟

算法笔记(四)——模拟

文章目录

  • 算法笔记(四)——模拟
  • 替换所有的问号
  • 提莫攻击
  • Z字形变换
  • 外观数列
  • 数青蛙

模拟算法就是根据题目的要求,题目让干神马就做神马,一步一步来

替换所有的问号

题目:替换所有的问号

在这里插入图片描述

思路

  • 从左到右遍历整个字符串,找到问号之后,就⽤ a ~ z 的每⼀个字符去尝试替换

C++代码

class Solution 
{
public:
    string modifyString(string s) 
    {
        for(int i = 0; i < s.size(); i ++)
        {
            if(s[i] == '?')
            {
                for(char ch = 'a'; ch < 'z'; ch ++)
                {
                    if((i == 0 || ch != s[i - 1]) // 和前面相不相等 
                    && (i == s.size() - 1 || ch != s[i + 1])) // 和后面相不相等
                    {
                        s[i] = ch;
                        break;
                    }
                }
            }
        }
        return s;
    }
};

提莫攻击

题目:提莫攻击

在这里插入图片描述
思路

  • 遍历数组当前位置减去前一个位置, 如果差值
  • 大于中毒时长,就加上中毒时间
  • 如果小于,就加上差值
  • 最后,加上最后一次中毒时间

C++代码

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

        return res + duration;
    }
};

Z字形变换

题目:Z字形变换

在这里插入图片描述
思路

  • 如果横着看,就是数学法,找通项公式;
  • 如果竖着看,在按列读取的时候,为每一行维护一个字符串,读到哪一行就在后面追加字符
  • 设置两个边界,在增长到或者减小到某个边界的时候,读取行的顺序进行反转,不断地从上到下,再从下到上读取,直到取完所有字串
class Solution 
{
public:
    string convert(string s, int numRows) 
    {
        if(numRows == 1) return s;

        vector<string> rows(numRows);
        int i = 0;
        int flag = -1;
        for(auto ch : s)
        {
            rows[i].push_back(ch);
            if(i == 0 || i == numRows - 1)
            {
                flag = -flag;
            }

            i += flag;
        }

        string res;
        for(auto x : rows) 
        {
            res += x;
        }
        
        return res;
    }
};

外观数列

题目:外观数列

在这里插入图片描述
思路
模拟 + 双指针,模拟实现
C++

class Solution 
{
public:
    string countAndSay(int n) 
    {
        string ret = "1";
        for(int i = 1; i < n; i ++)
        {
            string tmp;
            int len = ret.size();
            
            for(int l = 0, r = 0; r < len; )
            {
                while(r < len && ret[l] == ret[r]) r++;

                tmp += to_string(r - l) + ret[l];
                l = r;
            }
            ret = tmp;
        }
        return ret;
    }
};

数青蛙

题目:数青蛙

在这里插入图片描述

思路

  • 模拟将c、r、o、a、k存入哈希表;
  • 遍历字符串,
  • 如果遇到c,找最后一个字符,即k是否在哈希表中存在,若存在最后一个字符,即k--,当前字符,即c++
  • 遇到其他字符,若其前驱存在,前驱个数--,当前++;若不存在,返回-1

C++代码
纯暴力

class Solution 
{
public:
    int minNumberOfFrogs(string croakOfFrogs) 
    {
       int hash[5]={0};
       int n = croakOfFrogs.size();
       for(int i = 0;i < n;i++)
       {
           if(croakOfFrogs[i] == 'c')
           {
               if(hash[4] > 0)
               {
                   hash[4]--;
                   hash[0]++;
               }
               else hash[0]++;
           }
           else if(croakOfFrogs[i] == 'r')
           {
               if(hash[0] > 0)
               {
                   hash[0]--;
                   hash[1]++;
               }
               else return -1;
           }
           else if(croakOfFrogs[i] == 'o')
           {
               if(hash[1]>0)
               {
                   hash[1]--;
                   hash[2]++;
               }
               else return -1;
           }
           else if(croakOfFrogs[i] == 'a')
           {
               if(hash[2] > 0)
               {
                   hash[2]--;
                   hash[3]++;
               }
               else return -1;
           }
           else if(croakOfFrogs[i] == 'k')
           {
               if(hash[3] > 0)
               {
                   hash[3]--;
                   hash[4]++;
               }
               else return -1;
           }
           else return -1;
       }
       if(hash[0]||hash[1]||hash[2]||hash[3]) return -1;
       
       return hash[4]; 
    }
};

借助unordered_map

class Solution 
{
public:
   int minNumberOfFrogs(string croakOfFrogs) 
   {
       string t = "croak";
       int n = t.size();
       vector<int> hash(n);
       unordered_map<char, int> mp = {{'c', 0}, {'r', 1}, {'o', 2}, {'a', 3}, {'k', 4}};

       for(auto ch : croakOfFrogs)
       {
           if(ch == 'c')
           {
               if(hash[n - 1] != 0) hash[n - 1]--;
               hash[0]++;  
           }
           else
           {
               int i = mp[ch];
               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.mfbz.cn/a/886007.html

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

相关文章

初识TCP/IP协议

回顾上文 来回顾一下TCP协议的特性&#xff0c;有一道比较经典的题&#xff1a;如何使用UDP实现可靠传输&#xff0c;通过应用程序的代码&#xff0c;完成可靠传输的过程&#xff1f; 原则&#xff0c;TCO有啥就吹啥&#xff0c;引入滑动窗口&#xff0c;引入流量控制&#x…

【RabbitMQ——具体使用场景】

1. 异步 1.1 同步异步的问题&#xff08;串行&#xff09; 串行方式&#xff1a;将订单信息写入数据库成功后&#xff0c;发送注册邮件&#xff0c;再发送注册短信。以上三个任务全部完成后&#xff0c;返回给客户端 public void makeOrder(){// 1 :保存订单 orderService.…

排水系统C++

题目&#xff1a; 样例解释&#xff1a; 1 号结点是接收口&#xff0c;4,5 号结点没有排出管道&#xff0c;因此是最终排水口。 1 吨污水流入 1 号结点后&#xff0c;均等地流向 2,3,5 号结点&#xff0c;三个结点各流入 1/3 吨污水。 2 号结点流入的 1/3​ 吨污水将均等地流向…

nginx打包部署前端vue项目全过程【保姆级教程】

&#x1f939;‍♀️潜意识起点&#xff1a;个人主页 &#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持…

【JavaScript】Bit:组件驱动开发的新时代

Bit 是一个现代化的开发工具&#xff0c;帮助开发者通过组件驱动的方式进行软件开发和协作。它旨在解决开发大型系统时的常见挑战&#xff0c;如组件的复用性、独立性和协作性问题。通过 Bit&#xff0c;开发团队可以更加轻松地共享、管理和维护可复用的代码组件&#xff0c;同…

初识算法 · 双指针(2)

目录 前言&#xff1a; 盛最多水的容器 题目解析&#xff1a; 算法原理&#xff1a; 算法编写&#xff1a; 有效三角形的个数 题目解析&#xff1a; 算法原理&#xff1a; 算法编写&#xff1a; 前言&#xff1a; 本文介绍两个题目&#xff0c;盛最多水的容器和有效三…

Jenkins: fontconfig head is null, check your fonts or fonts configuration;

​ 在部署jenkins第一次启动时遇到如下报错&#xff1a; 一大串报错&#xff0c;看的让人脑瓜疼。。。静静地分析一下日志&#xff0c;发现第一行报错信息&#xff1a; fontconfig head is null, check your fonts or fonts configuration。 这是个什么鬼&#xff0c;我也不…

师生健康信息管理:SpringBoot技术突破

第4章 系统设计 4.1 系统体系结构 师生健康信息管理系统的结构图4-1所示&#xff1a; 图4-1 系统结构 登录系统结构图&#xff0c;如图4-2所示&#xff1a; 图4-2 登录结构图 师生健康信息管理系统结构图&#xff0c;如图4-3所示。 图4-3 师生健康信息管理系统结构图 4.2…

linux文件编程_文件

1. 文件编程概述 之前在windows中对文件的操作是&#xff1a;打开文档—>编辑文档—>保存文档—>关闭文档 我们的Linux文件编程主要是利用代码对文件进行操作&#xff1a;文件创建、打开、编辑等自动化执行等 在Linux我们要使用编程调用api函数的方式进行文档的编辑…

数据结构-链表笔记

移除节点 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListN…

C++杂项

作业&#xff1a; 将之前实现的顺序表、栈、队列都更改成模板类 顺序表 #include <iostream>using namespace std;template<typename T>class SeqList { private:T *ptr;int size; //总长度int len 0; //当前顺序表实际长度public://初始…

Vue3.X + SpringBoot小程序 | AI大模型项目 | 饮食陪伴官

gitee平台源码 github平台源码 饮食陪伴师是一个管理饮食的原生大模型小程序&#xff0c;优势&#xff1a; 精确营养监控&#xff1a;用户记录饮食后&#xff0c;我们会计算出食用的营养成分与分量&#xff0c;并反馈给用户。饮食建议有效&#xff1a;大模型经过我们训练具备大…

中建材信云智联项目总监张瑞洲受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 中建材信云智联科技有限公司数字化事业部项目总监张瑞洲先生受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾&#xff0c;演讲议题为“电厂智能安全管控项目范围管理实践分享”。大会将于10月26-27日在北…

工具介绍---效率高+实用

Visual Studio Code (VS Code) 功能特点&#xff1a; 智能代码提示&#xff1a;内置的智能代码提示功能可以自动完成函数、变量等的输入&#xff0c;提高代码编写速度。插件丰富&#xff1a;支持成千上万的扩展插件&#xff0c;例如代码片段、主题、Linting等&#xff0c;能够…

67.【C语言】枚举类型

1.定义 对于有限的情况,一一列举 如一周有7天,从周一到周日;光学三原色(Red Green Blue) 2.格式 enum 枚举类型名 {//枚举常量 }; 备注:enum为enumeration缩写 3.枚举成员变量的值 #include <stdio.h> enum color {Red,Green,Blue };int main() {printf("%d…

alpine安装docker踩坑记

文章目录 前言错误场景正确操作最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;最近使用alpine操作系统上docker遇到了一些错误&#xff0c;尝试解决之后就准备输出一篇博客&#xff0c;帮助有需要的后人能够少踩坑&#xff0c;因为淋过雨所以想给别人撑伞 错误场景 我…

基于Hive和Hadoop的电信流量分析系统

本项目是一个基于大数据技术的电信流量分析系统&#xff0c;旨在为用户提供全面的通信数据和深入的流量使用分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 Spark…

Excel实现省-市-区/县级联

数据准备 准备省份-城市映射数据&#xff0c;如下&#xff1a; 新建sheet页&#xff0c;命名为&#xff1a;省-市数据源&#xff0c;然后准备数据&#xff0c;如下所示&#xff1a; 准备城市-区|县映射数据&#xff0c;如下&#xff1a; 新建sheet页&#xff0c;命名为&#x…

遗传算法与深度学习实战(15)——差分进化详解与实现

遗传算法与深度学习实战&#xff08;15&#xff09;——差分进化详解与实现 0. 前言1. 差分进化1.1 基本原理1.2 差分进化基本流程 2. 使用差分进化逼近复杂和不连续函数小结系列链接 0. 前言 深度学习 (Deep learning, DL) 系统通常可以被简单的视为凸函数逼近器&#xff0c;…

[Linux]从零开始的网站搭建教程

一、谁适合本次教程 学习Linux已经有一阵子了&#xff0c;相信大家对LInux都有一定的认识。本次教程会教大家如何在Linux中搭建一个自己的网站并且实现内网访问。这里我们会演示在Windows中和在Linux中如何搭建自己的网站。当然&#xff0c;如果你没有Linux的基础&#xff0c;这…