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

目录

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

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

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

相关文章

Unreal Engine动态添加Button实例

在控件蓝图中添加容器&#xff0c;注意命名不要有中文 C代码中找到容器实例 1 2 3 4 5 6 7 8 UVerticalBox* verticalBox Cast<UVerticalBox>(CurrentWidget->GetWidgetFromName(TEXT("VerticalBox_0"))); if (verticalBox ! nullptr) { UScrollBox* …

【Linux】:文件查看 stat、cat、more、less、head、tail、uniq、wc

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Linux深造日志 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、stat&#xff08;查看文件详细属性信息&#xff09;1.1 内容解析&#xff1a;1.2…

外贸自动化操作脚本的编写!

随着信息技术的飞速发展&#xff0c;外贸行业也迎来了自动化的浪潮&#xff0c;自动化操作脚本的编写&#xff0c;成为了外贸从业者提高工作效率、减少重复性劳动的重要手段。 本文将介绍外贸自动化操作脚本的编写基础&#xff0c;并通过4段源代码的实例&#xff0c;带领读者深…

【工具】-根源上解决VScode打印输出乱码的问题

目录 1 第一步&#xff1a; 改编译命令&#xff0c;保持一致2 第二步&#xff1a; 更改VScode的编码格式-保持一致 1 第一步&#xff1a; 改编译命令&#xff0c;保持一致 看一下你的控制台的编译的命名后缀&#xff0c;有两个关键的参数&#xff0c;如下图&#xff1a; “-f…

thinkphp5.0.23漏洞复现以及脚本编写

1 thinkphp5.0.23远程代码执行漏洞简介 ThinkPHP5.0.23漏洞主要涉及远程代码执行(RCE)的安全隐患。这一漏洞的存在是因为ThinkPHP框架在底层对控制器名的过滤不够严格,导致攻击者有可能通过特定的URL构造,调用到框架内部的敏感函数,进而执行任意命令。 2 thinphp5.0.23漏…

普通屏幕已过时?裸眼3D屏幕显示效果更胜一筹!

随着多媒体技术的迅猛进步&#xff0c;我们日常生活中的内容展现方式&#xff0c;已经经历了前所未有的变革。在这其中&#xff0c;裸眼3D屏幕的应用&#xff0c;无疑是最为引人注目的亮点&#xff0c;它相较于传统屏幕&#xff0c;在显示效果上展现出了鲜明的优势&#xff0c;…

[iOS]使用CocoaPods发布私有库

1.创建私有 Spec 仓库 首先&#xff0c;需要一个私有的 Git 仓库来存放你的 Podspec 文件&#xff0c;这个仓库用于索引你所有的私有 Pods。 在 GitHub 或其他 Git 服务上创建一个新的私有仓库&#xff0c;例如&#xff0c;名为 PrivatePodSpecs。克隆这个仓库到本地&#xf…

电商API数据采集接口||大数据的发展,带动电子商务产业链,促进了社会的进步

最近几年计算机技术在诸多领域得到了有效的应用&#xff0c;同时在多方面深刻影响着我国经济水平的发展。除此之外&#xff0c;人民群众的日常生活水平也受大数据技术的影响。 主流电商API数据采集接口||在这其中电子商务领域也在大数据技术的支持下&#xff0c;得到了明显的进…

关于我在 uniapp 开发过程中遇到的问题(更新中...)

目录 uniapp 勾选自带的隐私政策 出现的问题 是否忽略版本兼容检查提示 勾选了uniapp的消息推送 打包后弹出 push module was not added when packaging, please refertohttps://ask.dcloud.net.cn /article/283 关于uniapp的真机调试 一直等待问题 或者 正在建立链接 在…

机器人前馈控制MATLAB实现

在机器人控制中&#xff0c;前馈控制是一种常用的方法&#xff0c;用于补偿系统中的已知动态。前馈控制通常与反馈控制结合使用&#xff0c;以提高系统的跟踪性能和响应速度。在MATLAB中实现机器人前馈控制涉及几个步骤&#xff0c;包括系统建模、设计前馈控制器、实现控制算法…

【前后端】django与vue的结合使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、前后端分离的简介二、django与vue的结合使用三、总结 前言 随着开发语言及人工智能工具的普及&#xff0c;使得越来越多的人会主动学习使用一些开发工具&a…

一、Django 初识

简介 Django 是一个用于构建 Web 应用程序的高级 Python Web 框架。 版本对应 不同版本的django框架是基于特定的不同的python版本开发的&#xff0c;所以不同版本的django框架要正常执行功能只能安装特定的python版本 Django安装 安装 Django # 全局安装 pip install dj…

金融案例:统一查询方案助力数据治理与分析应用更高效、更安全

随着企业数据规模的增长和业务多元化发展&#xff0c;海量数据实时、多维地灵活查询变成业务常见诉求。同时多套数据库系统成为常态&#xff0c;这既带来了数据管理的复杂性&#xff0c;又加大了数据使用的难度&#xff0c;面对日益复杂的数据环境和严格的数据安全要求&#xf…

苹果发布开源模型;盘古大模型5.0将亮相;英伟达将收购 Run:ai

苹果首次发布开源语言模型 近期&#xff0c;苹果在 Hugging Face 发布了 OpenELM 系列模型。OpenELM 的关键创新是逐层扩展策略&#xff0c;该策略可在 transformer 模型的每一层中有效地分配参数&#xff0c;从而提高准确性。 与具有统一参数分配的传统语言模型不同&#xff…

rabbitmq集群配置

1&#xff0c;配置环境变量 MY_POD_NAME&#xff1a;当前Pod的名称 RABBITMQ_ERLANG_COOKIE&#xff1a;设置Erlang Cookie用于节点间通信安全验证&#xff0c;值来自/nfs/rabbitmq/lib/.erlang.cookie文件内容 RABBITMQ_NODENAME&#xff1a;根据Pod名称动态生成了RabbitMQ…

前端到全栈进阶之“前端框架”

从前端入门到全栈-系列介绍 你会学到什么&#xff1f; 可能学不到什么东西&#xff0c;该系列是作者本人工作和学习积累&#xff0c;用于复习 系列介绍 现在的 Web 前端已经离不开 Node.js&#xff0c;我们广泛使用的 Babel、Webpack、工程化都是基于 Node 的&#xff0c;各…

k8s-身份认证与权限

认证概述 Kubernetes作为一个分布式集群的管理工具&#xff0c;保证集群的安全性是其一个重要的任务。所谓的安全性其实就是保证对Kubernetes的各种客户端进行认证和鉴权操作。 在Kubernetes集群中&#xff0c;客户端通常有两类&#xff1a; User Account&#xff1a;一般是独…

vue elementui el-table 表格里边展示四分位图

vue elementui el-table 表格里边展示四分位图 直接上代码&#xff08;效果图在文章末尾&#xff09;&#xff1a; 父组件&#xff1a; <template> <el-table size"small":header-cell-style"headerCellStyle()"style"width: 100%;"…

Linux平台Unity下RTMP|RTSP低延迟播放器技术实现

技术背景 国产操作系统对于确保信息安全、促进技术创新、满足特定需求以及推动经济发展等方面都具有重要意义&#xff0c;多以Linux为基础二次开发。2014年4月8日起&#xff0c;美国微软公司停止了对Windows XP SP3操作系统提供支持&#xff0c;这引起了社会和广大用户的广泛关…

Spark 基础

/* Why Spark一、MapReduce编程模型的局限性1、繁杂&#xff1a;只有Map和Reduce两个操作&#xff0c;复杂的逻辑需要大量的样板代码2、处理效率低&#xff1a;2.1、Map中间结果写磁盘&#xff0c;Reduce写HDFS&#xff0c;多个Map通过HDFS交换数据2.2、任务调度与启动开销大3、…