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

东莞清洁服务网站建设什么叫友情链接

东莞清洁服务网站建设,什么叫友情链接,教做衣服网站,千图网网站怎么做目录 前言: Z字形变换 题目解析 算法原理 算法编写 数青蛙 题目解析 算法原理 算法编写 前言: ​本文的主题是模拟,通过两道题目讲解,一道是Z字形变化,一道是数青蛙。 链接分别为: 1419. 数青蛙…

目录

前言:

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

感谢阅读!

http://www.ds6.com.cn/news/14477.html

相关文章:

  • 泉州市网站建设云南疫情最新消息
  • 网站该怎么找2023北京封控了
  • 政府网站建设管理会议铁力seo
  • 杭州建设网官方网站室内设计师培训班学费多少
  • 唯品会网站页面设计google官网入口注册
  • 贸易网站有哪些seo排名优化推荐
  • 2017网站开发薪资最新推广赚钱的app
  • 如何自建网站 卖东西推广公司app主要做什么
  • 手机网站开发报价培训网站制作
  • 怎么做免费网站发稿服务
  • wordpress侧边菜单主题南昌seo排名扣费
  • 秦皇岛哪家公司网站建设好有域名了怎么建立网站
  • 网站开发一般分为几个步骤房地产营销策略有哪些
  • 玄武模板网站制作点击查看东莞网络营销销售
  • 织梦幼儿园 早教 教育培训类网站模板亚马逊的免费网站
  • 做海报的网站类似于创客贴教育培训网
  • 贵阳企业网站建设制作免费b2b平台推广
  • 商丘网站制作方案seo体系百科
  • 杭州网站制作维护目前较好的crm系统
  • 做外贸网站公司哪家小小课堂seo自学网
  • dedecms 网站seo技术顾问阿亮
  • 杭州手机网站制作整站优化案例
  • python做网站培训班报名
  • 苏州工业园区属于哪个区优化设计六年级下册数学答案
  • 电子商务网站建设的总体设计搜索引擎调词工具哪个好
  • 前端做网站如何调接口广东近期新闻
  • 中国钓鱼网站大全神点击恶意点击软件
  • wordpress伪装成破解成功网站seo关键词排名推广
  • 电脑从做系统怎么找回以前登录的网站1688官网
  • oppo网站开发设计竞价托管多少钱