- 博客(15)
- 收藏
- 关注
原创 LeetCode 322「零钱兑换」题解:从贪心到暴力递归,再到记忆化搜索与动态规划
LeetCode 322「零钱兑换」要求用最少硬币凑出目标金额。贪心策略因反例不成立,需采用动态规划。通过定义 dp[i] 为凑出金额 i 的最少硬币数,自底向上填表:初始化 dp[0]=0,其余为 amount+1;状态转移为 dp[i] = min(dp[i], dp[i-c]+1)(c 为硬币面额)。最终若 dp[amount] > amount 则返回 -1,否则返回结果。时间复杂度 O(amount × n),空间复杂度 O(amount),有效解决重叠子问题。
2026-11-07 19:53:00
313
原创 洛谷 P1908 逆序对题解:分治与归并排序的经典应用
洛谷P1908逆序对是一道经典分治题。通过归并排序的合并过程,利用左右子数组有序的特性,在a[i] > a[j]时一次性统计mid - i + 1个跨区间逆序对,实现O(n log n)高效计数。核心在于分治思想:递归求解左右子区间逆序对,合并时处理跨区间部分。需注意答案用long long防止溢出。该方法不仅解决本题,也为类似偏序统计问题提供通用思路。
2026-10-31 20:59:53
25
原创 洛谷 P1309 [NOIP 2011 普及组] 瑞士轮 题解
本题通过分析瑞士轮比赛的性质,发现每轮赛后胜者组与败者组内部天然有序,无需全量排序。优化解法采用归并思想:每轮比赛后将胜者组与败者组两个有序序列合并,时间复杂度由暴力的 $O(R \cdot N \log N)$ 降至 $O(R \cdot N)$,有效避免超时。代码实现中,初始排序后逐轮模拟比赛,利用归并合并结果,最终输出第 $Q$ 名选手编号。
2026-10-24 20:09:42
284
原创 前缀和与差分:从暴力到 O(1) 优化
本文系统讲解前缀和与差分的核心思想:通过预处理实现区间查询与修改的O(1)优化。前缀和用于快速求区间和,差分则高效支持区间加法。结合蓝桥杯两道例题,展示两者在降低时间复杂度(从O(nm)降至O(n+m))中的应用,并总结使用场景与模板,助力解决各类区间问题。
2026-10-17 20:42:07
216
原创 前缀和与差分:从入门到实战(以 P1083 借教室为例)
对于一个数组a[1..n],定义前缀和数组s即s[i]表示原数组前i个元素的和。差分是前缀和的逆运算。定义差分数组d其中约定a[0] = 0。操作前缀和差分核心作用快速求区间和快速做区间修改预处理O(n)O(n)单次区间操作O(1) 查询O(1) 修改适用场景多次区间求和多次区间加减逆运算关系差分是前缀和的逆运算前缀和是差分的逆运算前缀和与差分是算法竞赛中最基础也最常用的两种技巧。理解它们的核心在于把握"
2026-10-10 09:35:32
218
原创 力扣 4066. 至多一次替换后的最大相邻相等元素对数:vector 二维数组与 unordered_map 的实战
摘要(≤150字): 本文解析力扣4066题,通过枚举替换位置并分析其对相邻相等对的影响,优化暴力解法。利用vector<vector<int>>存储各位置邻居信息,结合unordered_map高效判断替换值带来的增量。核心思想是仅考虑原值、左邻、右邻三种候选值,避免全范围枚举。时间复杂度为O(n),空间复杂度O(n),有效解决了“至多一次替换”的最大相邻相等对问题。
2026-10-01 21:28:08
146
原创 P1002 [NOIP 2002 普及组] 过河卒:记忆化递归的思想与方法
过河卒题揭示了记忆化递归的核心思想:通过缓存重复子问题的解,将指数级朴素递归优化为多项式时间。本文以该题为例,剖析重复子问题的危害,展示记忆化如何“算一次存一次”,实现从 O(2^(n+m)) 到 O(n×m) 的质变。同时对比记忆化与递推的异同,提炼出通用三步法——定义状态、写出转移、加缓存,为解决各类重叠子问题提供钥匙。
2026-09-26 15:58:10
339
原创 快速排序详解:思路、C++ 实现与换位排序总结
本文系统讲解快速排序的核心思想与C++实现:基于分治策略,通过选基准、分区和递归完成排序,采用Lomuto分区方案,平均时间复杂度为O(n log n),空间复杂度O(log n)。文章附完整代码示例,并对比换位排序,帮助新手建立从简单到复杂的算法认知体系。
2026-09-19 08:13:31
347
原创 2026蓝桥杯新生赛:3.地下管线巡检(贪心)
小蓝巡线机器人在无限格子轨道上巡检,指令中?需修复为L、R或S。为最大化经过的不同格子数,应排除S(不动无益),并证明:所有?统一修复为L或R优于混合选择(避免折返浪费)。通过模拟两种极端策略,计算路径最左与最右位置,答案为maxx - minx + 1。时间复杂度O(n),空间O(1),可高效处理10^5规模数据。
2026-09-12 20:12:49
211
原创 桶排序的简单讲解及核心步骤分析
摘要: 桶排序是一种高效的分治排序算法,适用于数据分布均匀且范围已知的场景(如成绩排序)。其核心步骤为:1)分桶,将元素按范围分配到不同桶中;2)桶内排序(常用插入排序);3)合并桶。算法平均时间复杂度为O(n),最坏O(n²),空间复杂度O(n+k)。相比其他排序,桶排序在数据均匀时速度优势明显,但对数据分布敏感,且需要额外空间。实现时需注意桶的数量和范围划分,Python代码展示了分桶、插入排序和合并的过程。桶排序特别适合大数据量且取值范围集中的情况,是一种"空间换时间"的典型算法。
2026-08-15 10:42:18
341
原创 关于哈希表的一些看法
本文介绍了哈希表的基本概念及其优势。哈希表通过哈希函数建立键值对的映射关系,实现平均O(1)时间复杂度的快速查找,相比数组遍历更高效。文章阐述了哈希表在C++中的实现形式unordered_map,解释了哈希冲突现象及其解决方法(链地址法和开放寻址法)。最后指出哈希表在算法问题中的广泛应用,如两数之和、字符统计等场景。哈希表的核心价值在于利用哈希映射实现快速数据访问,是算法设计中的重要基础数据结构。
2026-08-08 21:28:37
231
原创 写给前端小白的布局入门笔记:从骨架到盒子模型,再到浮动定位
这篇文章总结了作者学习前端开发一个月的心得体会,重点分享了HTML和CSS的核心概念。主要包括:HTML文档骨架的构建思路,将页面元素类比为房间中的家具;盒子模型的理解及box-sizing属性的重要性;浮动和定位的布局技巧与实际应用场景;以及从整体到局部的页面构建流程。作者强调语义化标签和结构化思维在前端开发中的关键作用,并分享了自己的项目实践习惯,如优先使用border-box模式。文章为前端新手提供了清晰的学习路径和实用的布局思路,适合刚入门的学习者参考。
2026-08-06 21:18:45
164
原创 前端学习感悟
摘要: 本文分享了零基础学习前端开发的心得,重点解析HTML与CSS的核心作用及学习方法。HTML作为网页骨架,通过语义化标签搭建内容结构;CSS负责样式美化,赋予页面视觉表现。学习过程强调"结构样式分离"的编程思想,并总结出实操练习的重要性。作者已掌握基础静态页面开发,计划后续深入学习CSS布局与JavaScript交互,建议初学者从标签和样式入手,通过持续实践逐步提升技能。全文为前端新手提供了清晰的学习路径和实用建议。
2026-08-01 11:49:34
234
原创 C语言数组,不定长数组及C++中的<vector>容器
本文对比了C语言静态数组、C99变长数组(VLA)和C++ vector三种数组类型。静态数组大小固定且需编译时确定,存储在栈内存;C99 VLA允许运行时确定长度但仍是固定大小,仅GCC支持且存在栈溢出风险;C++ vector作为动态数组支持自动扩容,底层使用堆内存并提供丰富接口,是推荐的动态数组实现方式。三者关键区别在于内存位置、长度可变性和使用场景,其中vector功能最为强大且安全。
2026-07-25 17:07:28
278
1
原创 力扣 2841.几乎唯一子数组的最大和
本文探讨了如何高效求解数组中满足条件的"几乎唯一"子数组最大和问题。通过滑动窗口技术配合哈希表统计元素出现次数,实现了O(n)时间复杂度的解法。核心思路是:1)使用滑动窗口维护固定长度k的子数组;2)利用哈希表动态统计窗口内不同元素数量;3)当不同元素数≥m时更新最大和。该方法避免了暴力解法的O(nk)复杂度,关键点在于及时删除哈希表中计数归零的元素以保持统计准确性。文章包含完整C++实现代码和详细算法分析。
2026-07-17 14:40:29
297
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅