算法:数据结构

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博客

相关推荐
水木流年追梦17 分钟前
大模型入门-大模型优化方法12-YaRN 长文本外推技术
人工智能·分布式·算法·正则表达式·prompt
J-Tony111 小时前
【JVM】三色标记法
java·jvm·算法
wengad1 小时前
机器学习实践理论基础|算法、模型和数据集
人工智能·算法·机器学习
梦梦代码精2 小时前
为什么这个开源的AI平台会火?有点东西。。。
人工智能·算法·机器学习·docker·开源
随意起个昵称2 小时前
线性dp-综合刷题1(Not Alone)
算法·动态规划
Lyyaoo.3 小时前
【数据结构】HashMap底层存储+扩容机制+线程安全【待更新】
数据结构·安全·哈希算法
如何原谅奋力过但无声3 小时前
【灵神高频面试题合集09-13】二叉树、二叉搜索树
数据结构·算法·leetcode
皆圥忈4 小时前
磁盘物理结构与文件系统基础讲解
linux·算法
数据仓库搬砖人4 小时前
用 LangGraph 从零搭一个客服 Agent:多轮对话 + 工具调用全流程
算法
GuWenyue4 小时前
告别JS类型坑!Ts为什么在ai时代逐渐成为"第一"语言
前端·算法·typescript