- 博客(69)
- 收藏
- 关注
原创 「动态规划::状压DP」网格图递推 / AcWing 292|327(C++)
如果我们有一张地图,要求是在符合某类条件的前提在地图上放置最优解,该怎么计算?
2025-05-29 21:09:04
977
原创 「动态规划::状压DP」旅行商问题(TSP|最短哈密尔顿回路) / AcWing 91 | LeetCode 847|943(C++)
TSP,也就是旅行商问题,是给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路的问题,而这个回路也称为最短哈密尔顿回路。
2025-05-28 02:03:35
935
原创 「动态规划::状压DP」双数组排列问题 / LeetCode 1879|2850(C++)
什么是状态压缩?就是将一系列状态压缩进一个二进制数中。
2025-05-22 01:04:40
674
原创 「动态规划::背包DP」多重背包 / 二进制优化|单调队列优化 / AcWing 4|5|6(C++)
多重背包是背包问题中较为复杂的一个问题,我们将依次介绍朴素算法、二进制优化、单调队列优化,来依次解决AcWing 4、5、6。
2025-05-21 02:14:13
1064
原创 「动态规划::线性DP」股票问题合集 / LeetCode 121|122|123|188 (C++)
我们已经了解过了线性DP:更进一步,我们来解决非常经典的线性DP问题系列:买卖股票。
2025-05-07 21:19:54
995
原创 「动态规划::背包DP」分组背包 / AcWing 9(C++)
分组背包是变形的完全背包,这次给物品加了一个分组属性,也就是说,这次是对物品组进行01背包。
2025-05-03 01:17:51
1032
原创 「动态规划::背包DP」完全背包 / AcWing 3(C++)
01背包探讨的是选与不选的问题,而完全背包探讨的是在可无限重复选择物品的问题。
2025-05-03 00:49:51
557
原创 「动态规划::线性DP」最长上升子序列(LIS)|编辑距离 / LeetCode 300|72(C++)
DP,即动态规划是解决最优化问题的一类算法,我们要通过将原始问题分解成规模更小的、相似的子问题,通过求解这些易求解的子问题来计算原始问题。线性DP是一类基本DP,我们来通过它感受DP算法的奥义。
2025-04-30 20:50:44
1231
原创 「数学::数论」分解质因子 / LeetCode 2521(C++)
由算数基本定理,我们知道任意一个大于1的自然数可以表示为一些质数的乘积,该怎么用算法描述呢?
2025-01-27 00:38:21
1186
原创 「STL::array」标准库容器:array(数组)介绍(C++)
array 是一种C++标准模板库STL中定义的一种序列容器,它提供了对数组的初步封装。
2024-11-07 16:23:40
717
原创 「图::连通」详解并查集并实现对应的功能 / 数据结构模版(C++)
并查集,故名思议,能合并、能查询的集合,在图的连通性问题和许多算法优化上着广泛的使用。
2024-10-19 17:59:32
594
原创 「数学::快速幂」矩阵快速幂运算|快速斐波那契数列 / LeetCode 509(C++)
快速幂不仅可以用于求数的幂,也可以求矩阵的幂,进而进行将一些递推算法优化成logn算法。
2024-10-19 17:14:01
846
原创 「字符串」Z函数(扩展KMP|exKMP)/ LeetCode 2223(C++)
Z函数是一种独到的匹配算法,虽然国内称之为扩展KMP,其实他更具有Manacher算法的特征。与KMP类似的是,它也是字符串自匹配问题。
2024-10-10 00:35:32
1194
原创 「数组」二分答案 / LeetCode 1870(C++)
区别于二分查找对数组下标进行二分,二分答案是对一个与数组无关的实数域进行二分,并将二分得到的值作用于数组判断可行性的过程。
2024-10-02 18:12:37
659
原创 「STL::queue」标准库适配器:priority_queue(优先队列)介绍|自定义比较运算(C++)
queue 是一种C++标准模板库STL中定义的一种序列容器,它允许你在运行时动态地进行堆操作。本文介绍了priority_queue的成员函数和自定义元素比较方法。
2024-10-01 20:14:12
1021
原创 「STL::queue」标准库适配器:queue(队列)介绍(C++)
queue 是一种C++标准模板库STL中定义的一种序列容器,它允许你在运行时动态地进行队列操作。本文介绍了queue的成员函数。
2024-09-26 16:24:33
1030
原创 「STL::stack」标准库适配器:stack(堆栈|栈)介绍(C++)
stack 是一种C++标准模板库STL中定义的一种序列容器,它允许你在运行时动态地进行栈操作。本文介绍了stack的成员函数。
2024-09-26 00:43:54
1047
原创 「数组」定长滑动窗口|不定长滑动窗口 / LeetCode 2461|2958(C++)
滑动窗口是一类经典的双指针问题,它会借用额外的存储结构来维护一段连续的子数组。
2024-09-21 17:52:59
1055
原创 「堆」实现优先队列(priority_queue)的功能 / 数据结构模版(C++)
优先队列,是一种堆结构,按元素的相对大小关系执行出队操作。本文实现了这种数据结构。
2024-09-16 17:36:08
1420
原创 「数组」堆排序 / 大根堆优化(C++)
本文我们来讲选择排序与分治思想结合的产物:堆排序。我们希望只进行少量比较就能得出数组中的最小元素,该怎么做呢?堆这种结构给了我们一点启发。
2024-09-15 17:39:17
1949
原创 「数学::数论」埃氏筛|欧拉筛(埃拉托斯特尼筛法|线性筛法)/ LeetCode 204(C++)
埃氏筛和欧拉筛是两种几乎跑在线性时间的质数算法,他们在处理大量数据时的性能极其优异,我们尤其希望你理解了欧拉筛的两条原则,这有助于培养线性递推的能力。
2024-09-12 00:06:57
1477
原创 「数学::数论」质数试除法 / Luogu P5736(C++)
质数是指在大于1的自然数中只能被1和它自己整除的数。我们可以利用这一除法性质对质数进行判定。
2024-09-07 18:38:29
682
原创 「图::存储」邻接矩阵|边集数组|邻接表(C++)
图是一种高级数据结构:链表是一个节点由一条边指向下一个节点,二叉树是一个节点由两条边指向下两个节点,而图是由任意多个节点由任意多条边指向任意多个节点。对于这种复杂的结构,如何存储在计算机的程序语言中呢?
2024-09-05 00:38:13
1044
原创 「数组」计数排序|桶排序|基数排序(C++)
这三种排序都是非比较类排序,它们只关注元素的绝对特征,而忽视相对特征,同时,也被称为时间换空间类型算法,虽然适用范围较为狭窄,但是在适用范围内时间效率较高。
2024-09-03 23:14:22
1795
1
原创 「数组」二分查找模版|二段性分析|恢复二段性 / LeetCode 35|33|81(C++)
二分查找的本质就是利用数组的二段性进行快速的分析。
2024-08-30 22:31:47
1528
原创 「数组」逆序对 / LeetCode LCR 170(C++)
我们希望求解一个数组的全部逆序对,暴力做法似乎很直观,但是时间复杂度是O(n²)级别的。但是归并排序提供给我们一种手段,在nlogn时间内解决这个问题。
2024-08-24 22:04:56
758
原创 「数组」数组双指针算法合集:二路合并|逆向合并|快慢去重|对撞指针 / LeetCode 88|26|11(C++)
双指针是一种简单而又灵活的技巧和思想,单独使用可以轻松解决一些特定问题,和其他算法结合也能发挥多样的用处。
2024-08-22 20:59:24
1209
原创 「数组」希尔排序 / 区间增量优化(C++)
希尔排序又被称为缩小增量排序,是高级算法中唯一使用了O(1)常量空间的算法,它充分利用了插入排序的特点,以此实现的分治思想简单又不失魅力。
2024-08-21 22:58:14
1178
原创 「字符串」字符串哈希|RK匹配:前缀哈希|滚动哈希 / LeetCode 28(C++)
我们今天从最简单的暴力匹配算法BF讲起,谈谈字符串哈希思想,以及两种哈希:前缀哈希和滚动哈希
2024-08-18 23:27:07
1366
原创 「字符串」详解AC自动机并实现对应的功能 / 数据结构模版(C++)
AC自动机是能以线性时间复杂度对整个文本进行黑名单词汇统计的数据结构。本文详解并实现了这种结构。
2024-08-17 23:56:25
871
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人