当前位置: 首页 > 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.tj-hxxt.cn/news/24067.html

相关文章:

  • 一元云购网站开发seo推广哪家公司好
  • 品玩 wordpress主题淘宝seo是指什么
  • 一流高职院校建设工作网站北京网站优化
  • 真人性做爰 video网站百度站长平台网页版
  • 网站提交了被收录后改怎么做河南seo
  • wordpress 小工具居中哈尔滨优化网站公司
  • 做区块链好的网站360指数官网
  • 江苏炒股配资网站开发个人博客登录入口
  • 花钱做网站注意个人小白如何做手游代理
  • linode搭wordpress做专业搜索引擎优化
  • 武汉做网站的公司有哪些比较好4p 4c 4r营销理论区别
  • 桂林网站建设培训班b2b网站排名
  • Wordpress网站删除多余主题山东泰安网络推广
  • 聊城专业网站建设万网域名查询
  • 广州技术支持 网站建设武汉seo培训
  • 在哪个网站可以学做淘宝详情百度一下京东
  • 无锡网站建设哪家做得比较好百度网页版登录
  • 外贸公司如何运作深圳seo优化排名
  • 珠海市人民政府门户网站百度竞价推广一个月多少钱
  • 代加工网站有哪些哪些平台可以发布软文
  • 时时彩网站建设公司百度认证服务平台
  • 网站开发学多久网络营销前景和现状分析
  • 衡水企业网站制作站长工具果冻传媒
  • ajax网站模板长沙竞价优化
  • 毕业设计做 做交易网站球队排名世界
  • 学前端要逛那些网站海外营销推广
  • 模板网站对排名的影响免费刷网站百度关键词
  • 表格做的网站影响收录营销咨询服务
  • 宝鸡投中建设网站百度精准搜索
  • 有什么网站做统计图的个人博客登录首页