当前位置: 首页 > news >正文

初识算法 · 模拟(2)

目录

前言:

Z字形变换

题目解析

算法原理

算法编写

数青蛙

题目解析

算法原理

算法编写


前言:

​本文的主题是模拟,通过两道题目讲解,一道是Z字形变化,一道是数青蛙。
链接分别为:

1419. 数青蛙 - 力扣(LeetCode)

6. Z 字形变换 - 力扣(LeetCode)
题目分为三个部分讲解,一是题目解析,二是算法原理,三是算法编写,那么,话不多说,直接进行主题咯。


Z字形变换

题目解析

该题目的要求相当于让我们将字符串分成一个一个的字符串,进行Z字形排列只需要让我们创建一个n * col的矩阵,可是col是多少我们并不知道。但是不影响。

题目要求我们转换字符串之后,将字符串从左到右依次读取字符串,最后返回即可。

这就是题目解析部分,我们进入到算法原理部分。

算法原理

因为是一道典型的模拟题目,所以我们只需要模拟一下这个过程就可以了:

解法一的话,直接就老老实实的模拟呗,不过这种方法的时间复杂度和空间复杂度都是比较高的,就拿创建的矩阵来说,我们都不知道矩阵的长究竟有多长,保险的创建方式就是让长等于length,毕竟N是有可能等于1的。

但是第一种方式在leetcode里面还真的是可以跑过去的,只是效率方面来说确实没有那么好而已。

接下来我们介绍一种优化方式,其实也是模拟大多数题目的一种优化方式,就找规律嘛,找规律之前,我们应该是否可以让所谓的字符变成一个一个的下标呢?当然是可以的。

就像是这样,转换成了下标之后,我们找规律就可以了,从第一行开始,发现是从0到6,也就是公差为6,此时的n是2,那么公差d是等于2 * n - 2的,其他n的取值也是这种情况,这里就不验证了。

那么第一行的规律我们找到了,那么最后一行一样的,无非开始的部分变成了n - 1而已,对于中间来说稍微是有一点麻烦的,因为有两个数字嘛。

同样的找规律,我们拿1举例,后面依旧是1 7 13,也是满足加d的这个规律的,对于5 11来说,我们拿1 5举例,1 + 5等于公差,对吧,所以第二个数的取值就是d - i,所以对于中间两个的取值我们只需要i d - i就可以了。

不过!我们还需要处理一下特殊情况,如果n = 1的话,那么我们就不需要变化了,并且n = 1的时候,公差d是等于0的。我们直接返回字符串就行了。

算法编写

class Solution 
{
public:string convert(string s, int numRows) {// 处理边界情况if(numRows == 1) return s;// 开始解释string ret;int d = 2 * numRows - 2;// 处理第一行for (int i = 0; i < s.size(); i += d)ret += s[i];// 处理中间行for (int i = 1; i < numRows - 1; i++){for (int m = i, n = d - m; m < s.size() || n < s.size(); m += d, n += d){if(m < s.size()) ret += s[m];if(n < s.size()) ret += s[n];}}// 处理最后一行for(int i = numRows - 1; i < s.size(); i += d)ret += s[i];return ret;}
};

数青蛙

题目解析

数青蛙这道题目,青蛙的输出顺序是croak,每只青蛙都是一个一个的输出的,让我们在一个输出序列里面找到最少需要多少只青蛙才可能输出对应的输出序列。

那么要求是最少的青蛙,找到返回就可以了。

算法原理

对于这道题目来说,是不是和提莫攻击这道题目有点类似,因为都是模拟一个序列,提莫攻击模拟的是提莫的攻击,对于这道题目来说模拟的是青蛙的蛙鸣行为。

那么总共的输出序列是croak,可能一只青蛙在叫的时候,另一只青蛙穿插着叫了。

但是,这并不影响青蛙的叫声是非常死板的,死板到只能从croak这个字符串序列里面输出,也就是青蛙叫r的时候,需要看前面是否存在c,如果存在c的话,它才能从r继续。

那么

当我们遍历这个序列的时候,用一个哈希数组来映射,当遍历到某个元素,判断前面是否存在元素,如果存在,那么前面的元素--,当前元素++,代表青蛙叫到了哪个位置。

其中比较特殊的是,当我们遍历到了c,那么我们应该是从k里面找是否存在青蛙空闲下来了,如果空闲了,那么K--,C++即可,因为我们是要找最少的青蛙个数。

所以现在一个哈希表是肯定要的,那么映射的时候,我们需要一种映射关系是吧?所以我们可以使用unordered_map映射字符和下标的关系即可。

这里的唯一作用就是遍历的时候判断前面的字符而已。

算法编写

class Solution 
{
public:int minNumberOfFrogs(string croakOfFrogs) {string s = "croak";int len = s.size();vector<int> hash(len);unordered_map<char, int> index;for (int i = 0; i < len; i++)index[s[i]] = i;for (auto ch : croakOfFrogs) {if (ch == 'c') {if (hash[len - 1] != 0)hash[len - 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 < len - 1; i++)if (hash[i] != 0)return -1;return hash[len - 1];}
};

感谢阅读!

相关文章:

初识算法 · 模拟(2)

目录 前言&#xff1a; Z字形变换 题目解析 算法原理 算法编写 数青蛙 题目解析 算法原理 算法编写 前言&#xff1a; ​本文的主题是模拟&#xff0c;通过两道题目讲解&#xff0c;一道是Z字形变化&#xff0c;一道是数青蛙。 链接分别为&#xff1a; 1419. 数青蛙…...

【Java面试】—— 创建线程池的两种方式(执行流程、拒绝策略)(详细)

目录 一、ThreadPoolExecutor(推荐)(重点) 1、参数 2、执行流程 3、常用方法 4、任务拒绝策略 二、Executors(不推荐) 1、常用方法 2、存在的问题 一、ThreadPoolExecutor(推荐)(重点) 1、参数 使用指定的初始化参数创建一个新的线程池对象 public Thread…...

Docker在微服务架构中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Docker在微服务架构中的应用 Docker在微服务架构中的应用 Docker在微服务架构中的应用 引言 Docker 基本概念 1. 容器 2. 镜像 3…...

苹果ASA归因对接以及API接入

一、归因概要 广告归因&#xff0c;目的是用于衡量广告带来的激活用户的成本以及后续进一步的用户质量表现。 Apple Ads 广告平台是基于 App Store&#xff08;站内广告&#xff09;&#xff0c;同时属于自归因平台&#xff08;通常称为 SAN&#xff09;。这两个因素&#xff…...

Git常用操作学习

目录 Git基础概述 1.1 什么是Git&#xff1f; 1.2 Git的优点Git工作流程 2.1 集中式工作流程 2.2 功能分支工作流程 2.3 Git Flow工作流程克隆仓库 3.1 使用git clone 3.2 克隆特定分支分支管理 4.1 创建分支 4.2 切换分支 4.3 合并分支 4.4 删除分支提交和推送更改 5.1 查看状…...

2.5D视觉——Aruco码定位检测

目录 1.什么是Aruco标记2.Aruco码解码说明2.1 Original ArUco2.2 预设的二维码字典2.3 大小Aruco二维码叠加 3.函数说明3.1 cv::aruco::detectMarkers3.2 cv::solvePnP 4.代码注解4.1 Landmark图说明4.2 算法源码注解 1.什么是Aruco标记 ArUco标记最初由S.Garrido-Jurado等人在…...

【PSQLException: An I/O error occurred while sending to the backend.】

PSQLException: An I/O error occurred while sending to the backend. java项目定时任务执行耗时很长的sql语句(很多条sql,从很多表中,很多数据中查询,处理)总之,耗时很长(PG数据库)。报错I/O error,Caused by : java.net.SocketTimeoutException: Read time out场景…...

图像基础算法学习笔记

目录 概要 一、图像采集 二、图像标注 四、图像几何变换 五、图像边缘检测 Sobel算子 Scharrt算子 Laplacian算子 Canny边缘检测 六、形态学转换 概要 参考书籍&#xff1a;《机器视觉与人工智能应用开发技术》 廖建尚&#xff0c;钟君柳 出版时间&#xff1a;2024-…...

【Elasticsearch】01-ES安装

1. 安装 安装elasticsearch。 docker run -d \--name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \-e "discovery.typesingle-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--networ…...

网络性能测试

一、iperf网络性能测试工具 测试udp丢包率 在服务器启动 iperf 服务端 iperf -p 9000 -s -u -i 1参数说明&#xff1a; -p : 端口号 -s : 表示服务端 -u : 表示 udp 协议 -i : 检测的时间间隔(单位&#xff0c;秒) 在客户端&#xff0c;启动 iperf 客户端 iperf -c xxx.xxx.14…...

docker:docker: Get https://registry-1.docker.io/v2/: net/http: request canceled

无数次的拉镜像让人崩溃&#xff1a; rootnode11:~/ragflow/docker# more rag.sh #export HTTP_PROXYhttp://192.168.207.127:7890 #export HTTPS_PROXYhttp://192.168.207.127:7890 #export NO_PROXYlocalhost,127.0.0.1,.aliyun.com docker compose -f docker-compose-gpu-C…...

esp32c3开发板通过micropython的mqtt库连MQTT物联网消息服务器

MQTT介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息协议&#xff0c;旨在设备之间进行通信&#xff0c;尤其是在网络条件较差的情况下。MQTT v3.1.1 和 MQTT v5 是该协议的两个主要版本。 MQTT v3.1.1&#xff1a; 优点&#xff…...

OceanBase 升级过程研究(4.2.1.6-4.2.1.8)

模拟业务 使用benchmark加载10仓数据模拟业务场景 升级方法 使用滚动升级方式来进行OB升级。该方法前提是OB集群必须满足官方规定的高可用架构(如果 Zone 个数小于 3&#xff0c;滚动升级时则无法构成多数派), 滚动升级的原理就是轮流完成每个ZONE的升级工作&#xff0c;由于…...

ubuntu下怎么设置机器程序开机自启?

在 Ubuntu 中&#xff0c;可以通过多种方法设置程序或脚本在系统启动时自动运行。以下是几种常见方法&#xff1a; 方法 1&#xff1a;使用 crontab crontab 是一个定时任务管理工具&#xff0c;可以用来设置程序在开机时自动运行。 1. 打开终端&#xff0c;编辑当前用户的 …...

Cesium 相机系统

Cesium 的相机系统是其 3D 地球渲染引擎的重要组成部分&#xff0c;它控制用户在虚拟地球上的视图和交互体验。Cesium 的相机系统具备灵活性和强大的功能&#xff0c;允许开发者自定义视图、导航和交互方式。以下是 Cesium 相机系统的主要特点和功能&#xff1a; 1. 相机的基本…...

数据结构(基本概念及顺序表——c语言实现)

基本概念&#xff1a; 1、引入 程序数据结构算法 数据&#xff1a; 数值数据&#xff1a;能够直接参加运算的数据&#xff08;数值&#xff0c;字符&#xff09; 非数值数据&#xff1a;不能够直接参加运算的数据&#xff08;字符串、图片等&#xff09; 数据即是信息的载…...

ZYNQ程序固化——ZYNQ学习笔记7

一、ZYNQ启动过程 二、 SD卡启动实操 1、对ZYNQ进行配置添加Flash 2、添加SD卡 3、重新生成硬件信息 4、创建vitis工程文件 5、勾选板级支持包 6、对系统工程进行整体编译&#xff0c;生成两个Debug文件&#xff0c;如图所示。 7、插入SD卡&#xff0c;格式化为 8、考入BOOT.…...

labview使用报表工具从数据库导出数据

之前写了一篇labview从数据库导出数据到excel电子表格&#xff0c;但是是基于调用excel的activeX控件&#xff0c;有时候会有一些bug&#xff0c;就比如我工作机就无法显示方法&#xff0c;后面大哥指点才知道没有的原因是excel安装不完整。像我的工作机就没有这个选项。就需要…...

#define定义宏(2)

大家好&#xff0c;今天给大家分享两个技巧。 首先我们应该先了解一下c语言中字符串具有自动连接的特点。注意只有将字符串作为宏参数的时候才可以把字符串放在字符串中。 下面我们来讲讲这两个技巧 1.使用#&#xff0c;把一个宏参数变成对应的字符串。 2.##的作用 可以把位…...

CentOS网络配置

上一篇文章&#xff1a;VMware Workstation安装Centos系统 在CentOS系统中进行网络配置是确保系统能够顺畅接入网络的重要步骤。本文将详细介绍如何配置静态IP地址、网关、DNS等关键网络参数&#xff0c;以帮助需要的人快速掌握CentOS网络配置的基本方法和技巧。通过遵循本文的…...

基于vue框架的的网上宠物交易管理系统46sn1(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,宠物分类,宠物信息 开题报告内容 基于Vue框架的网上宠物交易管理系统开题报告 一、研究背景 随着互联网技术的飞速发展和人们生活水平的提高&#xff0c;宠物已成为许多家庭的重要成员。宠物市场的繁荣不仅体现在实体店的遍地开…...

MySQL数据库:SQL语言入门 【2】(学习笔记)

目录 2&#xff0c;DML —— 数据操作语言&#xff08;Data Manipulation Language&#xff09; &#xff08;1&#xff09;insert 增加 数据 &#xff08;2&#xff09;delete 删除 数据 truncate 删除表和数据&#xff0c;再创建一个新表 &#xff08;3&#xf…...

MySQL深度剖析-索引原理由浅入深

什么是索引&#xff1f; 官方上面说索引是帮助MySQL高效获取数据的数据结构&#xff0c;通俗点的说&#xff0c;数据库索引好比是一本书的目录&#xff0c;可以直接根据页码找到对应的内容&#xff0c;目的就是为了加快数据库的查询速度。 索引是对数据库表中一列或多列的值进…...

路径规划——RRT-Connect算法

路径规划——RRT-Connect算法 算法原理 RRT-Connect算法是在RRT算法的基础上进行的扩展&#xff0c;引入了双树生长&#xff0c;分别以起点和目标点为树的根节点同时扩展随机树从而实现对状态空间的快速搜索。在此算法中以两棵随机树建立连接为路径规划成功的条件。并且&…...

数据科学与SQL:如何计算排列熵?| 基于SQL实现

目录 0 引言 1 排列熵的计算原理 2 数据准备 3 问题分析 4 小结 0 引言 把“熵”应用在系统论中的信息管理方法称为熵方法。熵越大&#xff0c;说明系统越混乱&#xff0c;携带的信息越少&#xff1b;熵越小&#xff0c;说明系统越有序&#xff0c;携带的信息越多。在传感…...

Redis/Codis性能瓶颈揭秘:网卡软中断的影响与优化

目录 现象回顾 问题剖析 现场分析 解决方案 总结与反思 1.调整中断亲和性&#xff08;IRQ Affinity&#xff09;&#xff1a; 2.RPS&#xff08;Receive Packet Steering&#xff09;和 RFS&#xff08;Receive Flow Steering&#xff09;&#xff1a; 近期&#xff0c;…...

微知-DOCA ARGP参数模块的相关接口和用法(config单元、params单元,argp pipe line,回调)

文章目录 1. 背景2. 设置参数的主要流程2.1 初始化2.2 注册某个params的处理方式以及回调函数2.4 定义好前面的params以及init指定config地点后start处理argv 3. 其他4. DOCA ARGP包相关4.1 主要接口4.2 DOCA ARGP的2个rpm包4.2.1 doca-sdk-argp-2.9.0072-1.el8.x86_64.rpm4.2.…...

PostgreSQL高可用Patroni安装(超详细)

目录 一 安装Patroni 0 Patroni 对Python的版本要求 1 卸载原来的Python 3.6 版本 2 安装Python 3.7 之上版本 3 安装依赖 psycopg3 4 安装patroni 5 卸载 patroni 二 安装ETCD 1 使用 yum 安装 etcd 2 etcd 配置文件 3 管理 etcd 4 设置密码 5 常用命令 三 安装…...

mcu之,armv7架构,contex-M4系列,时钟树,中断,IO架构(一)

写这篇文章的目的&#xff0c;是记录一下arm架构的32mcu&#xff0c;方便记忆芯片架构原理&#xff0c;方便我展开对&#xff0c;BootLoader的研究。 arm架构&#xff0c;时钟树&#xff0c;先做个记录&#xff0c;有空写。...

论文解析:基于区块链的去中心化服务选择,用于QoS感知的云制造(四区)

目录 论文解析:基于区块链的去中心化服务选择,用于QoS感知的云制造(四区) 基于区块链的去中心化云制造服务选择方法 一、核心内容概述 二、核心创新点及原理与理论 三、实验与理论分析 PBFT(实用拜占庭容错) 论文解析:基于区块链的去中心化服务选择,用于QoS感知的…...

wordpress用lnmp还是lamp/seo推广优化平台

ps aux | grep spring | xargs kill -9 更多技术文章请关注公众号:架构师Plus, 扫码添加...

做物品租赁网站/最新黑帽seo教程

emmm 再菜也要读完spring。 BeanFactory是spring的核心之一&#xff0c;事实上context也实现了BeanFactory接口&#xff0c;但是context并没有真正去实现BeanFactory&#xff0c;而是交给了DefaultListableFactory。接着上篇&#xff0c;来看看context中refresh()第一步构建的B…...

淄博公司做网站/成都搜狗seo

Connection:用于连接数据源Command:对数据源执行命令DataReader:在只读和只写的连接模式下从数据源读取数据.DataAdpter:从数据源读取数据并使用所读取的数据填充数据集对象.建立Connection 1,用SqlConnection连接Sql Server (1)引入命名空间: using System.Data.SqlClient; (2…...

哈尔滨建设网站公司/网站不收录怎么解决

1.datagridview中UserDeletingRow事件&#xff0c;当删除行时&#xff0c;UserDeletingRow事件不会触发&#xff0c;但选择行时&#xff0c;并且按delete键时&#xff0c;将会触发UserDeletingRow事件。 2.如果自定义复合控件时&#xff0c;当设置了Dock和Anchor属性时&#xf…...

濮阳专业做网站公司/2023新闻热点摘抄

2019独角兽企业重金招聘Python工程师标准>>> 下载安装 主站 http://nginx.org/ 下载 http://nginx.org/en/download.html 下载稳定版 http://nginx.org/download/nginx-0.7.67.zip 书 http://nginx.org/en/docs/ 中文wiki http://wiki.nginx.org/NginxChs 解压&…...

网站关键词排名优化方法/百度关键词首页排名服务

蒙特卡洛方法&#xff08;Monte Carlo method&#xff0c;也有翻译成“蒙特卡罗方法”&#xff09;是以概率和统计的理论、方法为基础的一种数值计算方法&#xff0c;将所求解的问题同一定的概率模型相联系&#xff0c;用计算机实现统计模拟或抽样&#xff0c;以获得问题的近似…...