02 2022 档案

摘要:并查集被很多OIer认为是最简洁而优雅的数据结构之一,主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作: 合并(Union):把两个不相交的集合合并为一个集合。 查询(Find):查询两个元素是否在同一个集合中。 当然,这样的定义未免太过学术化,看完后恐怕不太能理解它具体有什 阅读全文

posted @ 2022-02-28 22:17 ZheyuHarry 阅读(30) 评论(0) 推荐(0) 编辑

摘要:字典树(Trie)是一个比较简单的数据结构,也叫前缀树,用来存储和查询字符串。 具体是以怎样的存储方式呢,如图: 我们可以发现,正如其别名前缀树一样,具有相同前缀的字符串共享同一个树枝干,直到不同的地方才会分开来 具体对这个字典树的讲解,我们便分析板子边考虑: 835. Trie字符串统计 - Ac 阅读全文

posted @ 2022-02-27 23:17 ZheyuHarry 阅读(44) 评论(0) 推荐(0) 编辑

摘要:我们在前面已经用数组模拟过栈和队列去执行一些基本操作了,然后呢,我们这里引入单调栈和单调队列的概念 单调栈和单调队列顾名思义我们知道这个栈和这个队列中的元素是单调递增(递减)的,那么这些具体能用来处理哪些问题呢? 单调栈的应用:单调栈则主要用于 解决NGE问题(Next Greater Elemen 阅读全文

posted @ 2022-02-26 23:04 ZheyuHarry 阅读(82) 评论(0) 推荐(0) 编辑

摘要:KMP算法是一种用于字符串匹配的算法,我们在介绍KMP算法之前,我们先介绍一下字符串匹配的朴素算法: 题目:有长度为N的字符串P , 长度为M的字符串S , 问 P在S中匹配项的起始位置: 双重循环,遍历S数组,每遇到一个新的S[i] 就要从 P[1]重新开始判断是否匹配,相当于一层一层的往后靠:’ 阅读全文

posted @ 2022-02-25 22:15 ZheyuHarry 阅读(41) 评论(0) 推荐(0) 编辑

摘要://请注意,从这里开始讲的数据结构更多的是为了理解算法而存在的,可能讲的不是很完整 链表是一种比较特殊的数据结构,就像一条锁链一样链接起来。 通常,我们会把链表用一个结构体+指针的方式来存储数据, new的底层涉及内存分配,调用构造函数,指针转换等多种复杂且费时的操作。一秒大概能new1w次左右。 阅读全文

posted @ 2022-02-22 17:32 ZheyuHarry 阅读(58) 评论(0) 推荐(0) 编辑

摘要:离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。 离散化是程序设计中一个常用的技巧,它可以有效的降低时间复杂度。其基本思想就是在众多可能的情况中,只考虑需要用的值。离散化可以改进一个低效的算法,甚至实现根本不可能实现的算法。要掌握这个思想,必须从大量的题目中理解此方法的特 阅读全文

posted @ 2022-02-22 10:11 ZheyuHarry 阅读(48) 评论(0) 推荐(0) 编辑

摘要:我们将要引入一个双指针算法,我们考虑为什么要引入双指针算法呢,以及双指针算法究竟能为我们解决什么样的问题? 通常,我们会处理到有些问题需要遍历某个序列,但根据题意我们并不需要重复判断某些过程,所以我们会利用双指针算法来取代朴素算法。将时间复杂度为O(n^2)的算法优化到O(n),就是可以不需要重复遍 阅读全文

posted @ 2022-02-19 11:05 ZheyuHarry 阅读(89) 评论(0) 推荐(0) 编辑

摘要:差分和前缀和其实是一对逆操作,这里将会对前缀和和差分是怎么实施的,如何理解,以及对应一维和二维数组的情况。 前缀和:换言之,就是前n项和,也就是高中学习数列时的Sn; Sn = a1+a2+……an; Sn+1 = a1+a2+……an+an+1 = Sn+an+1; 应用:如果要求从l到r的数字之 阅读全文

posted @ 2022-02-16 11:47 ZheyuHarry 阅读(149) 评论(0) 推荐(0) 编辑

摘要:通常,我们在处理问题的时候,很多的数据并不像我们所熟知的int 和long long一样,很容易的能被表达出来。特别是我们现在这个答案数据的时代,我们时常会遇见很多高精度的数据,有时要对它们进行操作就会很困难。 于是乎,我们引入了高精度算法: 我们先总结一下高精度算法的一些特性: ·首先高精度计算, 阅读全文

posted @ 2022-02-15 15:57 ZheyuHarry 阅读(97) 评论(0) 推荐(0) 编辑

摘要:今天要介绍的是一种比较常见但是效率很高的算法,就是二分法。因为二分法有着O(logn)的优秀时间复杂度,所以我们常常会用到它。 但是呢二分主要是运用于已经排好序了的序列,通常我们知道一个答案区间,然后二分的去寻找符合题意的answer;或者我们已知一个序列,我们要通过二分的方法去寻找它的位置,或者说 阅读全文

posted @ 2022-02-13 19:12 ZheyuHarry 阅读(335) 评论(0) 推荐(0) 编辑

摘要:在之前我们介绍了快速排序那种优美的算法,今天又要介绍一种新的排序算法,归并排序。 归并排序的核心思想其实还是分治,我们先分成若干个子问题,然后递归处理这些子问题,然后合并之即可,一下是具体的思路: 我们首先把这个序列等分为left和right,然后同样的递归处理左右两边的序列,当我们把子序列排序好之 阅读全文

posted @ 2022-02-11 14:01 ZheyuHarry 阅读(46) 评论(0) 推荐(0) 编辑

摘要:我们时常需要对数据进行排序,这里我们先引入一个比较简单的快速排序,其时间复杂度为O(nlogn),接下来介绍其思路: 我们首先需要知道的是,快速排序的思想是分治,我们是把问题一个个的区分为两个或多个的子问题,然后递归地处理它,最后合并子问题即可,所以在这里我们也是一样,我们找到一个参考数x,把x小的 阅读全文

posted @ 2022-02-10 21:34 ZheyuHarry 阅读(46) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示