自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 广度优先搜索详解(BFS)

广度优先搜索(Breadth-First Search,简称BFS),也称为宽度优先搜索,是图与树结构中最基础的遍历算法之一。与深度优先搜索(DFS)的遍历逻辑不同,BFS采用的策略:从起点出发,先遍历所有与起点距离为1的节点,再遍历距离为2的节点,以此类推,逐层向外扩展,直到遍历完所有可达节点。

2026-06-06 17:13:17 337

原创 动态规划——背包问题

背包问题的核心场景非常简单:你有一个容量有限的背包,还有一堆物品,每个物品有重量、价值等属性,你要选一些物品放进背包,在不超过背包容量的前提下,最大化总价值。根据物品的不同限制,背包问题衍生出了非常多的变种,我们一个个来看。dp[i][j]:前 i 件物品,背包容量为 j 时,能获得的最大价值。选或者不选,根据物品的限制调整转移的顺序和条件。学会了这五种最常见的背包,你就已经搞定了 99% 的背包问题,不管是 LeetCode 刷题,还是算法竞赛,都能轻松应对。

2026-05-02 17:08:53 430

原创 关于前缀和

本篇讲解二维前缀和核心用法,配套完整可直接运行的 C++ 模板代码。先读入二维矩阵,提前预处理前缀和数组,利用公式快速算出任意矩形区间总和。单次查询只用 O (1) 时间,适合多组询问、静态矩阵求和题目。代码排版规范、变量清晰,全程开 long long 防溢出,边界写法标准,适合刷题直接套用。

2026-05-02 16:57:14 408

原创 优先队列讲解

本文详细介绍了C++中的优先队列(PriorityQueue),主要内容包括:优先队列的概念与特性(基于二叉堆实现,入队出队时间复杂度O(logn));基本语法与两种常用定义方式(大顶堆和小顶堆);核心操作(push、pop、top等);自定义数据类型的实现方法;经典应用场景(TopK问题、Dijkstra算法等);以及常见使用注意事项(如默认是大顶堆、pop不返回值等)。文章最后给出了一个完整的TopK问题解决方案示例。

2026-05-02 16:11:01 385

原创 c++深度搜索讲解及例题

对于c++深度优先搜索的基本概念和例题讲解

2026-04-11 14:29:31 120

原创 快速幂

摘要 快速幂算法通过将幂运算分解为更小的子问题,将时间复杂度从O(n)优化到O(logn)。该算法利用递归和分治思想,当指数为偶数时分解为平方运算,为奇数时转换为偶数情况处理。算法模板包含递归实现和取模操作,后者在计算大数幂时尤为重要,需要在每一步运算后进行模运算以防止溢出。快速幂适用于大指数场景,如b=1000000时的计算优化。

2026-02-06 20:08:45 83

原创 二分查找/答案题目

【代码】二分查找/答案题目。

2026-02-03 17:23:01 51

原创 c++oj奇异题目之坤坤与小黑子的智斗,无脑列举情况吓哭全世界80亿人

这谁绷得住,奇异题目题解

2026-02-01 16:44:44 229

原创 c++唯一分解定理模板

这段C++代码用于对一个整数n进行质因数分解。程序通过循环从2开始测试每个数i是否为n的因数,当找到因数时,将其所有出现次数输出。最后如果n仍大于1,则输出剩余的质因数。该代码适用于解决完全平方数问题和质因数分解问题,核心思想是通过试除法找出所有质因数。代码使用了标准输入输出,时间复杂度约为O(√n)。

2026-02-01 15:44:13 39

原创 结构体排序,双指针,单调栈

本文包含四个算法题解:1. 区间合并:合并有交集或首尾相接的时间段,输出合并后的区间。输入m个[l,r]区间,排序后合并相邻区间,时间复杂度O(nlogn)。2. 活动选择:选择最多不重叠活动。按结束时间排序后贪心选择,时间复杂度O(nlogn)。3. 最长无重复子序列:使用双指针和哈希表维护无重复区间,时间复杂度O(n)。4. 最大矩形广告牌:利用单调栈求每个高度的最大宽度,计算最大面积,时间复杂度O(n)。所有解法都针对大规模数据(n≤10^5)进行了优化。

2026-01-31 22:43:44 78

原创 洛谷 B4452 [GESP202512 四级] 优先购买 题目详解

【代码】洛谷 B4452 [GESP202512 四级] 优先购买 题目详解。

2026-01-24 17:11:59 267

原创 单调栈详解(含题目)

本文介绍了单调栈的原理和应用场景。单调栈主要用于解决寻找元素左右第一个比其大/小的元素的问题,通过维护单调递增或递减的栈结构实现。文章给出了五个典型题目及解法:1)"向左看齐"求左侧最近较小元素位置;2)洛谷P5788模板题求右侧第一个较大元素;3)"Aki的能量防护墙"通过左右单调栈求最大矩形面积;4)洛谷P2422结合单调栈和前缀和求最大舒适度区间;5)洛谷P2947求奶牛仰望对象。这些题目展示了单调栈在不同方向和不同单调性下的应用,时间复杂度均为O(n

2026-01-24 17:03:19 332 2

原创 数据结构有关的题目(栈,队列,set和map)

本文摘要包含6个编程题目及其解决方案: 栈顺序验证:检查给定出栈顺序是否合理,使用栈模拟进出过程; 括号匹配:验证括号字符串是否合法,通过栈结构实现; 约瑟夫环:模拟报数出圈过程,使用队列实现; 数组去重:利用集合自动排序和去重特性; 词频统计:统计单词出现频率,忽略大小写差异; 向左看齐:使用单调栈算法查找左侧最近较小元素位置。所有题目均提供完整C++代码实现,涉及栈、队列、集合、哈希表等数据结构应用。

2026-01-17 16:49:52 236

原创 图的存储

完全图:每两个顶点之间都有一条边连接 边数:n(n-1)/2。完全有向图:每两个顶点之间都有两条边连接 边数:n(n-1)非连通图:从某个顶点出发,至少有一个顶点无法到达。连通图:从某个顶点出发,可以到达其余任意顶点。树的边数:(n-1)

2025-12-20 19:32:53 158

原创 关于欧拉图

本文介绍了欧拉图的基本概念、性质和应用。欧拉图指存在经过每条边恰好一次的回路(欧拉回路)的图,而半欧拉图则指存在欧拉路径但无欧拉回路的图。关键性质包括:连通图中所有顶点度数为偶数(有向图入度等于出度),且可分解为不共边回路的并。文章详细证明了这些性质的等价性,并介绍了构造欧拉回路的Hierholzer算法,其时间复杂度为O(|E|)。此外,还讨论了欧拉图在计算机译码等领域的应用,并提供了C++实现模板。

2025-12-20 18:50:52 746

原创 c++快速幂

本文包含两个算法实现:1)快速幂取余算法,用于高效计算大数幂取模运算;2)输出数组前k大数的程序,使用快速排序降序排列后输出前k个元素。快速幂通过二进制分解指数优化计算,时间复杂度O(logb)。前k大数问题使用快速排序实现,时间复杂度O(nlogn),适用于n<100000的规模。两个算法均给出了完整的C++代码实现,包含输入输出处理。程序通过OJ测试,难度为入门级,适合算法初学者学习基本排序和数论算法。

2025-10-12 11:10:40 108

原创 课堂笔记(31)(图论)

2025-08-20 14:40:03 258

原创 课堂笔记(30)(堆与哈夫曼树)

2025-08-20 14:06:58 142

原创 课堂笔记(29)(树与二叉树)

2025-08-17 09:40:20 131

原创 课堂笔记(28)(二分,贪心和分治)

2025-08-17 09:23:12 237

原创 课堂笔记(27)(栈与队列)

2025-08-17 09:15:48 103

原创 课堂笔记(26)(排序)

2025-08-14 17:37:55 136

原创 课堂笔记(24)(前缀和与差分)

2025-08-10 12:10:51 181

原创 课堂笔记(23)(模拟枚举)

2025-08-10 12:05:12 141

原创 课堂笔记(22)(字符处理和系统函数)

2025-08-10 11:58:48 303

原创 课堂笔记(21)(复杂度分析与流程图)

2025-08-10 11:51:52 246

原创 课堂笔记(25)(指针与链表)

本文介绍了C++指针的基本概念和使用方法。主要内容包括:指针变量的定义方式(int *p),指针与变量地址的关系(p=&a),指针运算符(*p)的使用,以及指针类型必须与所指变量类型一致的原则。同时还讲解了空指针(NULL/nullptr)的概念、指针作为函数参数的用法,以及数组作为函数参数时实际上是传递数组地址的特性。文中通过具体代码示例展示了指针修改数据、指针运算等操作,并指出函数内部获取数组长度通常需要额外参数传递。

2025-08-08 15:18:12 144

原创 vector

C++中的vector是STL提供的动态数组容器,具有自动扩容、高效访问等特点。主要用途包括存储动态数据集合、实现随机访问等。基本用法包括使用push_back添加元素、size获取大小、[]或at访问元素等。常用操作还有pop_back删除末尾、clear清空、begin/end迭代遍历等。vector支持多种初始化方式,如指定大小、填充值或初始化列表,并提供了front/back访问首尾元素、reserve预留空间等实用方法,是C++中最常用的容器之一。

2025-07-31 10:08:16 252

原创 课堂笔记(20)(递归)(约数个数定理)(约数和)

当发现我们要进行循环嵌套,发现每次循环的只有部分代码不一样,就可以使用递归。例如:爬楼梯(只能向上走1~3步),老鼠吃奶酪(二维数组画图)一些递推和递归的题目可以通过画图和找规律解决。

2025-07-29 10:59:50 224

原创 课堂笔记(19)(常用函数)

【摘要】本文介绍求解分数a/b的小数点后第n位数字的算法。通过模拟除法运算过程,在循环中逐位计算小数点后的数字:每次将余数乘以10得到被除数,计算当前位的商作为结果数字,并更新余数继续下一位计算。核心代码仅需6行,时间复杂度O(n)。文中还补充了字符串处理、浮点数格式化输出、数学函数、排序算法等相关C++常用函数的使用说明,包括类型转换、随机数生成等实用技巧,为数值计算和算法实现提供参考。

2025-07-27 08:55:36 149

原创 课堂笔记(18)(复习)

方式一:一样的作用操作字符数组(函数是实现)string(运算符实现)复制/重新赋值s1=s2拼接s1+s2追加s1+=s2比较s1>s2字符数组strlen(s1)string。

2025-07-26 08:43:50 233

原创 课堂笔记(17)(高精度)

本文介绍了高精度算法的实现方法,主要包括加法、减法和乘法运算。高精度加法通过字符串逆序存储、逐位求和并处理进位实现;减法在比较大小后逆序存储、逐位相减并处理借位;乘法分为单精度和高精度两种,通过数组存储和逐位相乘处理进位。所有运算最后都需逆序输出结果,并注意处理前导零问题。这些算法解决了大整数运算的精度问题,适用于超出常规数据类型范围的数值计算。

2025-07-23 18:36:52 283

原创 课堂笔记(16)(进制转换)

本文包含四个编程问题及解答:1.数列求和(1):计算第n项为f(n)=f(n-1)+(n-1)的数列前N项和;2.数列求和(2):求前n项平方和;3.半个回文数:判断十进制非回文数在二进制或十六进制下是否为回文;4.二进制转十进制:将25位以内二进制数转换为十进制。所有问题均给出完整C++代码实现,涉及递归、进制转换和字符串处理等算法。

2025-07-20 20:03:56 206

原创 课堂笔记(15)(递归算法和递推)(结构体)

摘要:本文介绍了递归算法的核心概念,包括递归三要素(终止条件、递归调用、返回结果)及其"递"与"归"两个阶段。通过求和函数演示递归实现,并说明尾递归特性。同时对比递推方法,以汉诺塔问题为例展示递归解法。文章还讲解了结构体的定义和使用方法,包括成员访问和结构体数组排序,重点说明sort函数中自定义比较函数cmp的编写规则,强调结构体排序需明确指定排序依据成员。内容涵盖从递归理论到结构体应用的多个编程知识点。

2025-07-18 18:17:41 479

原创 课堂笔记(14)(递归算法)

本文摘要包含了三个编程知识点:1) 数根计算:通过数字各位相加直到得到个位数;2) 完全数判断:数值等于其所有因子之和;3) 递归应用:包括等差数列和斐波那契数列的实现。每个知识点都配有详细的定义说明和C++代码示例,涉及输入输出处理(scanf/printf)和递归函数设计。内容涵盖数字处理、数学性质验证和递归算法应用,适合编程初学者学习基础算法实现。

2025-07-16 17:48:13 510

原创 纯粹素数(如何连续去掉最高位)(如何计算素数)(计算3000以内四位纯粹素数)

纯粹素数是这样定义的:一个素数,去掉最高位,剩下的数仍为素数,再去掉剩下的数的最高位,余下的数还是素数。这样下去一直到最后剩下的个位数也还是素数。求出所有小于3000的四位的纯粹素数。按从小到大的顺序输出若干个纯粹素数,每行一个。

2025-07-13 20:27:47 364

原创 课堂笔记(13)(自定义函数)(变量作用域)

文章摘要: 第一个程序计算班级n名学生三科平均分,输入n和成绩后输出保留1位小数的平均分。使用二维数组存储成绩,双重循环计算各科总分后求平均。 第二个程序输出杨辉三角前N行,使用二维数组构建三角形,通过判断边界条件赋值1,其他位置为上一行两数之和。 介绍自定义函数的两种类型: 无返回值(void)函数:不带参数直接执行操作 有返回值函数:指定返回类型,通过return返回结果 并说明全局/局部变量区别及函数声明方法。 所有代码均使用标准输入输出,包含必要头文件,遵循C++语法规范。

2025-07-13 20:15:02 894

原创 课堂笔记(12)

摘要:上节课回顾了约瑟夫问题,讲解了n个人围成一圈,数到m的人出列的实现方法,并给出了对应的C++代码。同时介绍了二维数组的定义和使用,包括如何访问特定行数据和遍历整个数组。还简要提及了多维数组的概念,强调数组下标从0开始计算的注意事项。课程内容涵盖经典算法问题和数组数据结构的基础知识。

2025-07-11 17:58:58 603

原创 课堂笔记(11)

摘要: 字符串关系判断:根据长度和字符匹配情况判断两字符串关系,分为4种类型(长度不等、完全匹配、大小写不敏感匹配、完全不匹配)。 魔镜项链问题:通过逆向还原魔镜复制过程,找出原始项链的最小可能长度,采用字符对称性检测方法。 字典序最小字符串:比较N个字符串,输出字典序最小的那个,使用逐字符比较方法。 高频字母统计:统计字符串中各字母出现频率,输出出现次数最多且ASCII码最大的字母,采用数组计数和最大值比较方法。 (共150字)

2025-07-09 18:12:06 436

原创 课堂笔记(10)

我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。因为任何字符串最后都有一个看不见的\0,在这之后的东西都不会赋值,假设字符串1=BCDEF,字符串2等于@#s,如果将字符串2复制到字符串1,那么字符串2的3个字符会覆盖到字符串1的前三个,就会变成字符串3=@#s(\0)EF,又因为在\0之后的东西都不会赋值,所以会变成字符串3=@#s。输入一行,包含一个字符串,长度小于80个字符。

2025-07-06 20:05:35 571

linkboy暗胞作品

暗胞

2025-10-28

空空如也

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

TA关注的人

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