自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 「堆」对顶堆 / LeetCode 295(C++)

对顶堆可以在元素动态变化时维护第k小/大的元素。

2024-10-13 02:52:24 575

原创 「字符串」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

原创 「数组」离散化 / Luogu B3694(C++)

在不关注元素的绝对性质时,使用离散化处理会使得我们关注的范围更加紧凑。

2024-09-24 16:24:52 856

原创 「数组」定长滑动窗口|不定长滑动窗口 / LeetCode 2461|2958(C++)

滑动窗口是一类经典的双指针问题,它会借用额外的存储结构来维护一段连续的子数组。

2024-09-21 17:52:59 1020

原创 「堆」实现优先队列(priority_queue)的功能 / 数据结构模版(C++)

优先队列,是一种堆结构,按元素的相对大小关系执行出队操作。本文实现了这种数据结构。

2024-09-16 17:36:08 1377

原创 「数组」十大排序:精讲与分析(C++)

截止目前,我们已经讲解并分析了十种最常见的排序算法,附对应文章链接和全体Code。

2024-09-15 18:27:07 546

原创 「数组」堆排序 / 大根堆优化(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 20:10:19 1764

原创 「图::存储」邻接矩阵|边集数组|邻接表(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

原创 力扣第71题:简化路径 放弃栈模拟,选择数据流√(C++)

震撼的C++输入输出流运用

2024-08-26 22:44:12 838

原创 「数组」逆序对 / 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

原创 「字符串」前缀函数|KMP匹配:规范化next数组 / LeetCode 28(C++)

究KMP之际,通next数组之变,成一家之言。

2024-08-20 14:09:39 1755 2

原创 「字符串」字符串哈希|RK匹配:前缀哈希|滚动哈希 / LeetCode 28(C++)

我们今天从最简单的暴力匹配算法BF讲起,谈谈字符串哈希思想,以及两种哈希:前缀哈希和滚动哈希

2024-08-18 23:27:07 1337

原创 「字符串」详解AC自动机并实现对应的功能 / 数据结构模版(C++)

AC自动机是能以线性时间复杂度对整个文本进行黑名单词汇统计的数据结构。本文详解并实现了这种结构。

2024-08-17 23:56:25 842

原创 「数组」归并排序 / if语句优化|小区间插入优化(C++)

归并排序是纯粹的递归分治排序,本文讲解了这种算法以及对应的优化方案。

2024-08-15 23:58:54 987

原创 「数学::快速幂」基本快速幂运算|快速幂取模运算(C++)

快速幂以logn级别的时间复杂度对幂运算快速求解。

2024-08-14 23:44:41 643

原创 「数组」摩尔投票(多数投票法|快速寻找区间众数) / LeetCode 169(C++)

摩尔投票是在一次遍历、常量空间下求数组多数元素的算法。

2024-08-13 19:57:51 493

原创 「数组」随机快速选择 / LeetCode LCR 076(C++)

随机数优化的快速排序变体:随机快速选择详解。

2024-08-10 23:53:32 460

原创 「数组」快速排序 / 随机值优化|小区间插入优化(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

原创 「数组」Knuth洗牌算法|C++random库简单介绍 / LeetCode 384(C++)

Knuth算法可以公平地对数组进行随机排序。

2024-08-03 18:47:09 442

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除