数据结构
算法好蓝,我好难
这个作者很懒,什么都没留下…
展开
-
树上问题——树的直径
求树的直径通常有两种方法,一种是通过两次搜索(bfs和dfs均可),另一种就是通过树形dp来求了。首先递归到叶结点,然后再由叶结点连接父节点,更新。树的直径就是树中所有最短路经距离的最大值。为初始点用dfs找到离初始点最远的点。开始,用dfs找到离初始点最远的点。数组表示离点i次远的点的距离)。数组表示离点i最远的点的距离,最大的值,该值即为树的直径。原创 2022-09-05 17:01:34 · 267 阅读 · 0 评论 -
数据结构——并查集
什么是并查集? 看这篇博客 https://blog.csdn.net/liujian20150808/article/details/50848646 了解了什么是并查集,我们现在来看怎么用代码来实现。 核心代码 带状态压缩的 int find(int x)//查询老大结点 { if(p[x]!=x) p[x]=find(p[x]); return p[x]; } int add(int a,int b)//合并两个帮派 { p[find(a)]=find(b);//b将a引荐给自己的大哥 } 一原创 2021-12-03 15:56:27 · 89 阅读 · 0 评论 -
数据结构易错点
正确答案:C、D A:原地工作算法的含义是指算法所需要的临时空间不依赖问题的规模n,即算法的空间复杂度为O(1) 并非不需要额外的临时空间。 B:当n的规模较小时,O(logn)不一定比O(n)慢,具体情况具体对待。 正确答案:ABD A:当时以为该函数没有返回值,便以为这不算算法,后来发现引用类型的形参也算输出,于是xyz便满足了算法必要的五个特性,算是一个合格的算法了 当时以为是需要先遍历找到结点p,后来发现只要考虑插入时的操作,那么时间复杂度就是O(1)。 B答案是顺序表的一个特点,链表无法.原创 2021-12-03 00:06:15 · 466 阅读 · 0 评论 -
数据结构——哈希表
哈希表的使用模板有两种,个人觉得开放寻址法比较容易理解和使用,这里只用开放寻址法的模板了。 模板 int h[N]; // 如果x在哈希表中,返回x的下标;如果x不在哈希表中,返回x应该插入的位置 int find(int x) { int t = (x % N + N) % N; while (h[t] != null && h[t] != x) { t ++ ; if原创 2021-10-07 10:51:15 · 95 阅读 · 0 评论 -
数据结构——单调队列
给定一个大小为 n≤106 的数组。 有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。 你只能在窗口中看到 k 个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子: 该数组为 [1 3 -1 -3 5 3 6 7],k 为 3。 窗口位置 最小值 最大值 [1 3 -1] -3 5 3 6 7 -1 3 1 [3 -1 -3] 5 3 6 7 -3 3 1 3 [-1 -3 5] 3 6 7 -3 5 1 3 -1 [-3 5 3] 6 7 -3 5 1 3 -1 -3 [5原创 2021-09-23 18:26:41 · 77 阅读 · 0 评论 -
数据结构——单调栈
给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。 输入格式 第一行包含整数 N,表示数列长度。 第二行包含 N 个整数,表示整数数列。 输出格式 共一行,包含 N 个整数,其中第 i 个数表示第 i 个数的左边第一个比它小的数,如果不存在则输出 −1。 数据范围 1≤N≤105 1≤数列中元素≤109 输入样例: 5 3 4 2 7 5 输出样例: -1 3 -1 2 2 #include <iostream> #include <cstr原创 2021-09-23 16:38:48 · 243 阅读 · 0 评论 -
数据结构——trie树
什么是trie树 Trie树,又称单词查找树、字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串)、敏感词过滤。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。 Trie树也有它的缺点,Trie树的内存消耗非常大。 ** 典型的trie树** 代码模板 插入函数 int son[N][26],idx;//son数组中原创 2021-09-10 19:24:02 · 141 阅读 · 0 评论