跳到主要内容

分享丨【题单】常用数据结构(前缀和/差分/栈/队列/堆/字典树/并查集/树状数组/线段树)

By 灵茶山艾府

题目已按照难度分排序,右侧数字为难度分。

如果遇到难度很大,题解都看不懂的题目,建议直接跳过,二刷的时候再来尝试。

数据结构题单数据结构入门数据结构新手教程

一、前缀和

§1.1 基础

原理讲解

§1.2 前缀和与哈希表

§1.3 距离和

图解

§1.4 前缀异或和

§1.5 其它一维前缀和

§1.6 二维前缀和

【图解】一张图秒懂二维前缀和!

二维前缀最小值:

二、差分

§2.1 一维差分(扫描线)

原理讲解(推荐和【图解】从一维差分到二维差分 一起看)

§2.2 二维差分

【图解】从一维差分到二维差分

三、栈

§3.1 基础

§3.2 进阶

§3.3 邻项消除

§3.4 合法括号字符串

注:部分题目可以不用栈,而是用一个数字记录嵌套深度。

§3.5 表达式解析

§3.6 对顶栈

§3.7 单调栈

单调栈题单

四、队列

队列常用在 BFS 中,见 网格图题单图论题单。与此相比,栈常用在 DFS 中,但无需我们手动维护。

§4.1 基础

§4.2 设计

§4.3 单调队列

个人觉得叫单调双端队列更准确。

原理讲解

§4.4 单调队列优化 DP

一般用来维护一段转移来源的最值。

  1. 前提:区间右端点变大时,左端点也在变大(同滑动窗口)。
  2. 转移前,去掉队首无用数据。
  3. 计算转移(直接从队首转移)。
  4. 把数据(一般是 f[i]f[i] )插入队尾前,去掉队尾无用数据。

五、堆(优先队列)

§5.1 基础

§5.2 进阶

§5.3 重排元素

§5.4 第 K 小/大

部分题目也可以用二分解决。

§5.5 反悔堆

基于堆的反悔贪心。

§5.6 懒删除堆

§5.7 对顶堆

另见 图论题单 中的 Dijkstra 算法。

六、字典树(trie)

§6.1 基础

§6.2 进阶

§6.3 字典树优化 DP

§6.4 0-1 字典树(异或字典树)

部分题目也可以用试填法解决。

七、并查集

§7.1 基础

网格图题单 中的 DFS 和 图论题单 中的 DFS,其中大部分题目可以用并查集实现。

§7.2 进阶

§7.3 公因数并查集

§7.4 数组上的并查集

§7.5 区间并查集

§7.6 边权并查集

八、树状数组和线段树

能用树状数组解决的题目,也能用线段树解决(反过来不一定)。但树状数组实现简单,代码短。

为方便大家练习,我把适合用树状数组解决的题目分到树状数组中,其余分到线段树中。

§8.1 树状数组

讲解:带你发明树状数组!附数学证明

§8.2 逆序对

也可以在归并排序的同时计算。

§8.3 线段树(无区间更新)

§8.4 Lazy 线段树(有区间更新)

§8.5 动态开点线段树

部分题目也可以用珂朵莉树解决。

专题:离线算法

对询问排序,通过改变回答询问的顺序,使问题更容易处理。

相应的,在线算法就是按照输入的顺序处理,来一个处理一个。

请作者喝奶茶:
Alipay IconQR Code
Alipay IconQR Code
本文遵循 CC CC 4.0 BY-SA 版权协议, 转载请标明出处
Loading Comments...