算法:数据结构

1.单调栈

单调栈就是具有单调性的栈,这个栈里面的数据要么是递增要么是递减的

应用场景:

求与目标元素距离最近的比他大/小的值的位置

具体可分为:

1.目标左侧,距离最近,比他大(降序单调栈)

2.目标左侧,距离最近,比他小(升序单调栈)

3.目标右侧,距离最近,比他大

4.目标右侧,距离最近,比他小

第三第四条只需要从顺序遍历数组变为逆序遍历数组,然后分别使用1,2的策略即可

例题:

1.算法题(179):单调栈-CSDN博客

2.算法题(180):发射站-CSDN博客

3.算法题(181):最大直方矩形面积_最大矩形面积 算法-CSDN博客

2.单调队列

是一个具有单调性的双端队列

应用场景:解决滑动窗口内最值问题,优化动态规划

例题:

1.算法题(182):滑动窗口(单调队列)-CSDN博客

2.算法题(183):质量检测-CSDN博客

3.并查集

**树的双亲表示法:**就是使用数组记录当前索引表示的节点的父节点索引

**并查集:**是一个森林结构,每棵树表示一个集合,集合内每个节点表示一个元素,使用根节点表示整个集合

**应用场景:**维护一个集合,该集合要频繁进行集合内数据查询,集合合并

3.1并查集实现

(1)初始化:

让所有节点都自成集合,并查集数组都自己存储自己的索引

(2)查询:

使用递归方法一直向上寻找父节点,直到找到自己集合的根节点为止

(3)合并操作:

让其中一方的根节点更改指向为另一方的根节点

eg:x,y作为各自集合的根节点,我们可以让x的父节点变为y,反之亦可

(4)优化:

最差情况下,整个并查集会变成链式,这时候我们find的递归深度会很深,如果多次查询时间复杂度会很高

所以我们利用记忆化方法,在进行过一次find之后,将所有经过的节点的并查集存储都改为根节点

3.2普通并查集

模板题:算法题(184):并查集-CSDN博客

例题:

1.算法题(185):亲戚(并查集)-CSDN博客

2.算法题(186):lake countings(并查集)_lake counting s-CSDN博客

3.算法题(187):程序自动分析-CSDN博客

3.3扩展域并查集

当元素之间存在不止一种关系的时候,就需要使用扩展域并查集

**比如:**人们之间可以存在朋友关系,也可以存在敌人关系,如果并查集的集合只有一种关系就不合适了。此时我们需要有两类集合

**核心实现:**通过认为划分区域来达到区分集合类型的目的

比如一共有n个人,将1-n划分为朋友域,n+1~n+n为敌人域

例题:

1.算法题(188):团伙_团伙 并查集csdn-CSDN博客

2.算法题(189):食物链(扩展域并查集)-CSDN博客

3.4带权并查集

在并查集的基础上给每个节点多添加了一个权值,这个权值可以表示当前节点和父节点的关系,比如距离/关系(特定数字表示特定关系)

**核心:**在进行并查集操作的同时要对权值数组也做合适操作

4.字符串哈希

字符串哈希就是将一个字符串用整数表示

**核心思想:**通过ASCII码值以及哈希运算将字符串中的字符与数字转换为哈希值,从而用哈希值来标识这个字符串,不过为了避免出现大量哈希冲突,我们的进制p设为131或者13331

**计算哈希值的方式:**使用使用和进制计算一样的方法,逐层进行计算(最多从p^0~p^n)

例题:

1.算法题(192):字符串哈希_字符串的哈希算法-CSDN博客

5.字典树

字典树是一种用于快速存储和查询字符串的多叉树结构,核心是利用字符串的公共前缀将字符串以树形结构存储下来

应用场景:

1.查询某个单词是否出现过,出现次数是多少

2.查询有多少个单词是以某个字符串为前缀

3.查询所有以某个前缀开头的单词

模板题:

1.算法题(194):字典树_字典树算法题-CSDN博客

2.算法题(195):点名-CSDN博客

相关推荐
玛卡巴卡ldf5 小时前
【LeetCode 手撕算法】(多维动态规划)不同路径、最小路径和、最长回文子串、最长公共子序列、编辑距离
java·数据结构·算法·leetcode·动态规划·力扣
_深海凉_6 小时前
LeetCode热题100-验证二叉搜索树
算法·leetcode·职场和发展
shehuiyuelaiyuehao6 小时前
算法27,二维前缀和
开发语言·python·算法
蒟蒻的贤6 小时前
编译原理里的冲突到底是什么?
考研·算法
_深海凉_6 小时前
LeetCode热题100-二叉树的右视图
算法·leetcode·职场和发展
计算机安禾6 小时前
【c++面向对象编程】第29篇:定位new(placement new):在指定内存上构造对象
开发语言·c++·算法
淞綰6 小时前
c语言的练习-字符串的练习-寻找最长连续字符以及出现次数
c语言·数据结构·学习·算法·c语言的练习
计算机安禾6 小时前
【c++面向对象编程】第27篇:空类的大小为什么是1?——C++对象标识的秘密
开发语言·c++·算法
信竞星球_少儿编程题库7 小时前
2026年全国信息素养大赛算法应用主题赛 丝路新城 Python 模拟卷(三)
开发语言·python·算法