[Algorithm][模拟][替换所有问号][提莫攻击][N字形变换][外观数列][数青蛙] + 模拟原理详细讲解

news2025/1/4 20:33:13

目录

  • 0.原理讲解
  • 1.替换所有的问号
    • 1.题目链接
    • 2.代码实现
  • 2.提莫攻击
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 3.N 字形变换
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 4.外观数列
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 5.数青蛙
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现


0.原理讲解

  • 模拟:依照题目要求,照葫芦画瓢:P
  • 如果模拟题的时间复杂度和空间复杂度过高,则一般都需要进行优化
  • 优化:一般都是找规律

1.替换所有的问号

1.题目链接

  • 替换所有的问号

2.代码实现

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 == n - 1 || ch != s[i + 1]))
                {
                    s[i] = ch;
                }
            }
        }
    }

    return s;
}

2.提莫攻击

1.题目链接

  • 提莫攻击

2.算法原理详解

  • 计算相邻两个时间点的差值:
    • 如果差值⼤于等于中毒时间,说明上次中毒可以持续duration
    • 如果差值⼩于中毒时间,那么上次的中毒只能持续两者的差值
      请添加图片描述

3.代码实现

int FindPoisonedDuration(vector<int>& timeSeries, int duration) 
{
    int ret = 0;
    for(int i = 1; i < timeSeries.size(); i++)
    {
        int interval = timeSeries[i] - timeSeries[i - 1];
        if(interval >= duration)
        {
            ret += duration;
        }
        else
        {
            ret += interval;
        }
    }

    return ret + duration;
}

3.N 字形变换

1.题目链接

  • N 字形变换

2.算法原理详解

  • 本题可以照本宣科的按照要求存储 && 读取,但是此时时间复杂度和空间复杂度都很高
  • 模拟题优化:找规律
    请添加图片描述

3.代码实现

string Convert(string s, int numRows) 
{
    // 处理边界情况
    if(numRows == 1)
    {
        return s;
    }

    string ret;
    int n = s.size(), d = 2 * numRows - 2;

    // 第一行
    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)
        {
            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;
}

4.外观数列

1.题目链接

  • 外观数列

2.算法原理详解

  • 思路:模拟 + 双指针

3.代码实现

// 控制逻辑 v1.0
// 自己控代码的逻辑
string CountAndSay(int n) 
{
    string src = "1";
    for(int i = 2; i <= n; i++) // 控制行
    {
        // 双指针
        string ret;
        int left = 0, right = 0;

        for(; right < src.size(); right++)
        {
            if(src[left] != src[right])
            {
                ret += to_string(right - left) + src[left];
                left = right;
            }
        }

        // 处理最后的一组数
        ret += to_string(right - left) + src[left];

        src = ret;
    }

    return src;
}
--------------------------------------------------
// 控制逻辑 v2.0
// 此逻辑比较优秀,不需求额外处理结尾情况
string CountAndSay(int n) 
{
    string src = "1";
    for(int i = 2; i <= n; i++) // 控制行
    {
        // 双指针
        string ret;
        for(int left = 0, right = 0; right < src.size();)
        {
            while(right < src.size() && src[left] == src[right])
            {
                right++;
            }
            ret += to_string(right - left) + src[left];

            left = right;
        }

        src = ret;
    }

    return src;
}

5.数青蛙

1.题目链接

  • 数青蛙

2.算法原理详解

  • 用哈希表来存储叫声

    请添加图片描述


3.代码实现

int MinNumberOfFrogs(string croakOfFrogs) 
{
    string str = "croak";
    int n = str.size();
    vector<int> hash(n); // 用数组模拟哈希

    unordered_map<char, int> index; // <ch, index>
    for(int i = 0; i < n; i++)
    {
        index[str[i]] = i;
    }

    for(auto& ch : croakOfFrogs)
    {
        if(ch == 'c')
        {
            if(hash[n - 1]) // k已存在
            {
                hash[n - 1]--;
            }
            hash[0]++;
        }
        else
        {
            int i = index[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.coloradmin.cn/o/1627406.html

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

相关文章

实现SpringMVC底层机制(一)

文章目录 1.环境配置1.创建maven项目2.创建文件目录3.导入jar包 2.开发核心控制器文件目录1.流程图2.编写核心控制器SunDispatcherServlet.java3.类路径下编写spring配置文件sunspringmvc.xml4.配置中央控制器web.xml5.配置tomcat&#xff0c;完成测试1.配置发布方式2.配置热加…

Vue入门篇:生命周期,钩子函数,工程化开发Vue(脚手架安装),组件化开发(全局注册,局部注册)

目录 1.Vue生命周期和生命周期的四个阶段2.Vue生命周期函数&#xff08;钩子函数)3.工程化开发&脚手架Vue CLI1.在powershell管理员权限下打开命令行安装脚手架&#xff1a;2.查看vue版本&#xff1a;3.创建项目架子4.运行项目 4.组件化开发&根组件1.App.vue文件&#…

JavaSE字节缓冲流

欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后端开发者。 博客特色&#xff1a; 在我的博客中&a…

解决minIO 文件上传回显报 403 问题

一、问题描述&#xff1a; minIO 上传文件回显时 提示 403 Forbidden 二、问题原因&#xff1a; minIO 中文件相对应的 buckets 权限问题造成 三、解决办法&#xff1a; 进入 minIO 控制台&#xff0c;将 buckets 中 access Policy 改为 public

监听器模式(三)

一、介绍 监听器模式是一种软件设计模式&#xff0c;在对象的状态发生改变时&#xff0c;允许依赖它的其他对象获得通知。在Java中&#xff0c;可以使用接口和回调机制来实现监听器模式。 二、代码实例 1、事件Event类 package com.xu.demo.listener;// 事件类 public class…

go设计模式之抽象工厂模式

抽象工厂模式 提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类。 工厂方法模式通过引入工厂等级结构&#xff0c;解决了简单工厂模式中工厂类职责太重的问题&#xff0c;但由于工厂方法模式中的每个工厂只生产一类产品&#xff0c;可能会导致…

【禅道客户案例】同方智慧能源数智化转型新实践 禅道助力前行

同方智慧能源是同方股份有限公司的骨干企业。依托中核集团、清华大学的科技优势&#xff0c;坚持技术和资源双核驱动&#xff0c;基于30多年行业积淀&#xff0c;面向建筑、交通、工业、北方供热、数据中心等主要用能场景提供设计咨询、产品技术、投资建设、运营服务&#xff0…

每天一题crypto(8)---RSA(相邻素数)

题目&#xff1a; p getPrime(512) q gmpy2.next_prime(p) from Crypto.Util.number import * import gmpy2 flag bNSSCTF{******}p getPrime(512) q gmpy2.next_prime(p) n p*q e 65537 phi (p-1)*(q-1)m bytes_to_long(flag)c pow(m, e, n)print(fn {n}) print(f…

Linux网络编程---多进/线程并发服务器

一、多进程并发服务器 实现一个服务器可以连接多个客户端&#xff0c;每当accept函数等待到客户端进行连接时 就创建一个子进程 思路分析&#xff1a; 核心思路&#xff1a;让accept循环阻塞等待客户端&#xff0c;每当有客户端连接时就fork子进程&#xff0c;让子进程去和客户…

【调研分析】机器视觉及其系统

机器视觉 定义 机器视觉主要利用计算机模拟人的视觉功能&#xff0c;但不仅限于人眼的简单延伸&#xff0c;而是具备人脑的部分功能&#xff0c;即从客观事物的图像中提取信息、进行处理并加以理解&#xff0c;从而应用于实际的检测识别、测量和控制过程。 机器视觉系统组成 …

JavaEE >> Spring Boot(2)

Spring Boot 配置文件 前面的文章已经介绍了 Spring Boot 项目的创建&#xff0c;上文&#xff0c;本文介绍 Spring Boot 的简单进阶使用。 配置文件的作用 项目中的所有重要数据都是在配置文件中配置的&#xff0c;例如&#xff1a; 数据库的连接信息&#xff08;包括数据…

BossCMS RCE(下)

未授权漏洞 在登录后台的时候通过查看添加用户功能&#xff0c;看能不能挖掘sql注入漏洞&#xff0c;结果发现了个大问题&#xff0c;一个比较好玩的权限逻辑问题。这里添加用户的路由 我们跟进到manager.class.php里面的add()方法&#xff0c;这里先into::basc_class(admin)&…

DS进阶:并查集

一、并查集的原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这…

局部多项式近似与 AMPM 算法

kappa3; %已在您的代码中定义% 定义窗口大小 windowSize (2*kappa1);% 初始化梯度估计值 [rows, cols] size(wrappedPhase); phi_y zeros(rows, cols); phi_x zeros(rows, cols);% 遍历每个窗口 for m 1kappa:rows-kappafor n 1kappa:cols-kappa% 提取局部窗口Z_mn wrap…

python 使用flask_httpauth和pyjwt实现登录权限控制

最近需要用到&#xff0c;学习了一下记录 首先安装依赖 pip install Flask-HTTPAuth pyjwt passlib Welcome to Flask-HTTPAuth’s documentation! — Flask-HTTPAuth documentation Welcome to PyJWT — PyJWT 2.8.0 documentation Passlib 1.7.4 documentation — Passl…

【代码随想录刷题记录】LeetCode27移除元素

题目地址 1. 思路 1.1 基本思路及代码的初步实现 基本思路大体上和卡尔老师的想法是一致的&#xff0c;详见代码随想录&#xff1a;数组&#xff1a;移除元素&#xff0c;暴力法大家都能想到&#xff0c;我这里写一下算法时间复杂度为 O ( n ) O(n) O(n)时候的思路&#xff…

短视频矩阵营销系统 poihuoqu 任意文件读取漏洞复现

0x01 产品简介 短视频矩阵营销系统是由北京华益云数据科技有限公司开发的一款产品,这家公司专注于抖音短视频矩阵营销系统的研发,致力于为企业提供全方位的短视频营销解决方案。华益云抖销短视频矩阵系统可以帮助企业快速搭建多个短视频账号,实现内容的批量制作和发布,提高…

ShardingSphere 5.x 系列【25】 数据分片原理之 SQL 解析

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 分片执行流程1.1 Simple Push Down1.2 SQL Federation2. SQL 解析2.1 解析…

SystemUI KeyButtonView setDarkIntensity 解析

继承自 ImageView KeyButtonDrawable intensity为0时按键颜色为白色。 intensity为1时黑色为的调用堆栈&#xff1a; java.lang.NullPointerException: Attempt to invoke virtual method int java.lang.String.length() on a null object referenceat com.android.systemui.…

嵌入式学习Day18

一、输入两个数&#xff0c;实现排序 代码&#xff1a; #!/bin/bashread -p "please enter n m:" n m if [ $n -gt $m ] thentemp$nn$mm$temp fi echo $n $m运行结果 二、输入一个数判断是否水仙花数 代码&#xff1a; echo narcissistic number read -p "p…