- 博客(57)
- 收藏
- 关注
原创 「数学::质数」分解质因子 / LeetCode 2521(C++)
由算数基本定理,我们知道任意一个大于1的自然数可以表示为一些质数的乘积,该怎么用算法描述呢?
2025-01-27 00:38:21
1131
原创 「STL::array」标准库容器:array(数组)介绍(C++)
array 是一种C++标准模板库STL中定义的一种序列容器,它提供了对数组的初步封装。
2024-11-07 16:23:40
680
原创 「图::连通」详解并查集并实现对应的功能 / 数据结构模版(C++)
并查集,故名思议,能合并、能查询的集合,在图的连通性问题和许多算法优化上着广泛的使用。
2024-10-19 17:59:32
570
原创 「数学::快速幂」矩阵快速幂运算|快速斐波那契数列 / LeetCode 509(C++)
快速幂不仅可以用于求数的幂,也可以求矩阵的幂,进而进行将一些递推算法优化成logn算法。
2024-10-19 17:14:01
695
原创 「字符串」Z函数(扩展KMP|exKMP)/ LeetCode 2223(C++)
Z函数是一种独到的匹配算法,虽然国内称之为扩展KMP,其实他更具有Manacher算法的特征。与KMP类似的是,它也是字符串自匹配问题。
2024-10-10 00:35:32
1164
原创 「数组」二分答案 / LeetCode 1870(C++)
区别于二分查找对数组下标进行二分,二分答案是对一个与数组无关的实数域进行二分,并将二分得到的值作用于数组判断可行性的过程。
2024-10-02 18:12:37
639
原创 「STL::queue」标准库适配器:priority_queue(优先队列)介绍|自定义比较运算(C++)
queue 是一种C++标准模板库STL中定义的一种序列容器,它允许你在运行时动态地进行堆操作。本文介绍了priority_queue的成员函数和自定义元素比较方法。
2024-10-01 20:14:12
975
原创 「STL::queue」标准库适配器:queue(队列)介绍(C++)
queue 是一种C++标准模板库STL中定义的一种序列容器,它允许你在运行时动态地进行队列操作。本文介绍了queue的成员函数。
2024-09-26 16:24:33
996
原创 「STL::stack」标准库适配器:stack(堆栈|栈)介绍(C++)
stack 是一种C++标准模板库STL中定义的一种序列容器,它允许你在运行时动态地进行栈操作。本文介绍了stack的成员函数。
2024-09-26 00:43:54
1019
原创 「数组」定长滑动窗口|不定长滑动窗口 / LeetCode 2461|2958(C++)
滑动窗口是一类经典的双指针问题,它会借用额外的存储结构来维护一段连续的子数组。
2024-09-21 17:52:59
1020
原创 「堆」实现优先队列(priority_queue)的功能 / 数据结构模版(C++)
优先队列,是一种堆结构,按元素的相对大小关系执行出队操作。本文实现了这种数据结构。
2024-09-16 17:36:08
1377
原创 「数组」堆排序 / 大根堆优化(C++)
本文我们来讲选择排序与分治思想结合的产物:堆排序。我们希望只进行少量比较就能得出数组中的最小元素,该怎么做呢?堆这种结构给了我们一点启发。
2024-09-15 17:39:17
1854
原创 「数学::质数」埃氏筛|欧拉筛(埃拉托斯特尼筛法|线性筛法)/ LeetCode 204(C++)
埃氏筛和欧拉筛是两种几乎跑在线性时间的质数算法,他们在处理大量数据时的性能极其优异,我们尤其希望你理解了欧拉筛的两条原则,这有助于培养线性递推的能力。
2024-09-12 00:06:57
1432
原创 「数学::质数」试除法 / Luogu P5736(C++)
质数是指在大于1的自然数中只能被1和它自己整除的数。我们可以利用这一除法性质对质数进行判定。
2024-09-07 18:38:29
657
原创 「图::存储」邻接矩阵|边集数组|邻接表(C++)
图是一种高级数据结构:链表是一个节点由一条边指向下一个节点,二叉树是一个节点由两条边指向下两个节点,而图是由任意多个节点由任意多条边指向任意多个节点。对于这种复杂的结构,如何存储在计算机的程序语言中呢?
2024-09-05 00:38:13
1005
原创 「数组」计数排序|桶排序|基数排序(C++)
这三种排序都是非比较类排序,它们只关注元素的绝对特征,而忽视相对特征,同时,也被称为时间换空间类型算法,虽然适用范围较为狭窄,但是在适用范围内时间效率较高。
2024-09-03 23:14:22
1722
1
原创 「数组」二分查找模版|二段性分析|恢复二段性 / LeetCode 35|33|81(C++)
二分查找的本质就是利用数组的二段性进行快速的分析。
2024-08-30 22:31:47
1499
原创 「数组」逆序对 / LeetCode LCR 170(C++)
我们希望求解一个数组的全部逆序对,暴力做法似乎很直观,但是时间复杂度是O(n²)级别的。但是归并排序提供给我们一种手段,在nlogn时间内解决这个问题。
2024-08-24 22:04:56
703
原创 「数组」数组双指针算法合集:二路合并|逆向合并|快慢去重|对撞指针 / LeetCode 88|26|11(C++)
双指针是一种简单而又灵活的技巧和思想,单独使用可以轻松解决一些特定问题,和其他算法结合也能发挥多样的用处。
2024-08-22 20:59:24
1173
原创 「数组」希尔排序 / 区间增量优化(C++)
希尔排序又被称为缩小增量排序,是高级算法中唯一使用了O(1)常量空间的算法,它充分利用了插入排序的特点,以此实现的分治思想简单又不失魅力。
2024-08-21 22:58:14
1142
原创 「字符串」字符串哈希|RK匹配:前缀哈希|滚动哈希 / LeetCode 28(C++)
我们今天从最简单的暴力匹配算法BF讲起,谈谈字符串哈希思想,以及两种哈希:前缀哈希和滚动哈希
2024-08-18 23:27:07
1337
原创 「字符串」详解AC自动机并实现对应的功能 / 数据结构模版(C++)
AC自动机是能以线性时间复杂度对整个文本进行黑名单词汇统计的数据结构。本文详解并实现了这种结构。
2024-08-17 23:56:25
842
原创 「数组」快速排序 / 随机值优化|小区间插入优化(C++)
快速排序是一种常见的高级排序算法。我们通过讲解其中的选择与分区操作来理解分治思想,并通过提出优化方案来实现很稳定的快速排序
2024-08-10 18:16:10
1182
原创 「栈」实现LIFO栈(先进后出栈|堆栈|stack)的功能 / 数据结构模版(C++)
栈,是一种基本的数据结构,也是一种数据适配器。它在底层上以链表方法或动态数组方法实现。本文选择了使用动态数组来实现这种数据结构。
2024-08-09 20:16:54
1100
原创 「链表」链表原地算法合集:原地翻转|原地删除|原地取中|原地查重 / LeetCode 206|237|2095|287(C++)
对于一张单向链表,我们总是使用双指针实现一些算法逻辑,这旨在用常量级别空间复杂度和线性时间复杂度来解决一些问题。
2024-08-07 23:15:34
1399
原创 「链表」Floyd判环法(弗洛伊德判圈法|龟兔赛跑法)|公式推导环入口 / LeetCode 142(C++)
Floyd判环算法,也称龟兔赛跑算法,可用于判断链表、迭代函数、有限状态机是否有环并找出环的位置。本文详解了这种算法。
2024-08-07 14:33:24
942
原创 力扣第45题:跳跃游戏 贪心DP(C++)
DP数组的实现就不必多说了,无非是dp[i]=dp[j]+1(到i的最少步数是j的步数+1,其中j是前面的所有能跳到i的位置里步数最少的)只是还不知道j是多少而已。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。注意,在j处能跳到的最远位置是下标j+nums[j]的位置。如果j不能跳到i,那么i就大于这个最远位置。思考一个问题:如果在位置j不能跳到位置i(j
2024-08-06 20:48:17
604
原创 「队列」实现FIFO队列(先进先出队列|queue)的功能 / 数据结构模版(C++)
队列,是一种基本的数据结构,也是一种数据适配器。本文实现了这种数据结构。
2024-08-05 21:09:12
1760
原创 力扣第120题:三角形最短路径和 二维DP逐行求解(C++)
对于第i行第j列的最优解,有dp[i][j]=min(dp[i-1][j],dp[i-1][j-1])+triangle[i][j]。表示dp数组最初有一行一列(vector(1)无名vector表示第一行有1个值),赋值为triangle[0][0]。需要注意列遍历在最左侧或最右侧时dp[i][j]直接等上一层的对应位置+triangle[i][j]。自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。用二维数组dp表示三角形每个位置的最优解。三角形的每一行都由上一行的最优解决定。
2024-08-04 22:08:10
229
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人