- 博客(11)
- 收藏
- 关注
原创 洛谷 P1908 逆序对 【题解】
本文介绍了利用归并排序统计逆序对的方法。归并排序的核心思想是将数组不断对半拆分至单个元素,再两两合并有序子数组。在合并过程中,当右区间元素小于左区间时,可一次性计算左区间剩余元素与该右区间元素形成的逆序对数量(mid-i+1)。这种方法在排序的同时统计逆序对,时间复杂度为O(nlogn)。文章详细说明了拆分、合并过程,并给出了完整的C++实现代码,包括递归调用和逆序对计数的关键步骤。
2026-05-08 08:07:52
536
原创 C++ STL:map+ vector/string
本文摘要: C++ STL容器核心知识点总结:1)map基于红黑树实现,操作复杂度O(logn),支持[]、insert、emplace三种插入方式,提供find/count查找和erase删除,遍历时默认按键升序。2)vector动态扩容机制影响性能,建议预先reserve空间,二维vector应初始化行列,可用unique快速去重。3)string操作注意substr参数含义,append比+=高效,支持find/rfind查找,提供stoi/to_string等数字转换接口,字符串可直接比较字典序。这
2026-05-07 00:29:49
362
原创 洛谷P1886 单调队列 滑动窗口 题解
本文介绍了滑动窗口问题的单调队列解法。针对固定窗口大小k,需要高效求出每个窗口内的最小值和最大值。暴力解法复杂度为O(nk),而单调队列优化可将复杂度降至O(n)。核心思想是使用两个单调队列分别维护窗口内的最小值和最大值:最小值队列保持递增,最大值队列保持递减。每个元素只进出队列各一次,通过三步操作(删除越界队头、删除破坏单调性的队尾、当前元素入队)维护队列性质。当窗口形成后,队头即为当前窗口的极值。文中给出了详细的代码实现,包括队列初始化、窗口边界判断和单调性维护等关键步骤。
2026-05-07 00:04:16
328
原创 C++ STL 栈与队列
摘要:本文介绍了C++中stack栈和queue队列的核心概念与使用方法。stack遵循LIFO(后进先出)原则,支持push、top、pop等操作,常用于括号匹配、表达式求值等场景;queue遵循FIFO(先进先出)原则,适用于BFS、任务排队等场景。两者均不支持随机访问,操作前需判空。文章还对比了二者的特点,并简要提及优先队列(堆)的应用,如TopK问题。关键提示:使用top()/front()前需检查容器非空,避免程序崩溃。
2026-05-05 23:19:34
156
原创 C++ STL 容器详解:vector 与 string + sort排序
本文详解 C++ 刷题四大核心:vector 动态数组、二维数组、string 字符串、STL sort 排序。涵盖初始化、常用 API、遍历模板、实战用法,搭配代码示例。同时梳理新手易错点:大数组全局定义防栈溢出、size () 无符号陷阱、sort 左闭右开、字符矩阵标准读入,干货精简,适合入门与刷题复用。
2026-04-24 13:24:10
308
原创 gcd/lcm + 素数判断与筛法
本文总结了数论中常用算法:1. 最大公约数(gcd)采用欧几里得算法,通过辗转相除法实现,时间复杂度O(log min(a,b));2. 最小公倍数(lcm)通过gcd推导,注意防溢出写法;3. 素数筛法包含埃氏筛(O(nloglogn))和欧拉筛(O(n)),后者通过最小质因子筛选保证线性复杂度。文末强调了大数运算的溢出风险及不同场景下的筛法选择建议。这些算法在分数运算、同余问题和大规模素数筛选中具有重要应用价值。
2026-04-14 23:30:34
269
原创 位运算与快速幂:从原理到实战
本文介绍了位运算和快速幂的核心原理及应用。位运算直接操作二进制数据,包括与、或、异或等6种基本操作,可用于高效判断奇偶、快速乘除等。快速幂通过二进制拆分指数将计算复杂度降至O(logn),是处理大指数运算的关键技术,适用于数论、密码学等领域。文中提供了标准快速幂模板,强调步步取模防溢出,并指出常见误区。核心思想是将指数拆分为二进制形式,底数不断平方来优化计算。这两种技术是高效算法的重要基础。
2026-04-06 17:29:26
439
原创 贪心算法入门详解
贪心算法是一种通过局部最优选择寻求全局最优解的算法思想。其核心特点是每一步都采取当前最优决策,具有简单高效的优势(时间复杂度通常为O(nlogn)),但并非适用于所有问题。有效使用贪心算法需要满足两个前提:贪心选择性质(局部最优不破坏全局最优)和最优子结构。典型应用如"分发饼干"问题,通过排序和双指针策略实现最优分配。但像"零钱兑换"这类问题则不适合贪心,因为局部最优可能导致全局次优。实际应用中,建议通过排序制定贪心规则,并用反例验证策略有效性,避免错误使用。掌握贪心算法的关键在于准确判断问题特征。
2026-04-02 10:30:39
673
原创 前缀和与差分:入门掌握
前缀和与差分是解决区间查询和更新问题的核心算法。前缀和通过预处理数组实现O(1)的静态区间和查询,而差分则通过逆运算实现O(1)的区间批量更新。两种方法都采用"空间换时间"思想,将时间复杂度从O(n)优化到O(1)。在竞赛中,前缀和常结合哈希表统计满足条件的子数组,二维前缀和则用于求解固定大小子矩阵的最值问题。典型应用包括统计和为k的子数组数量、计算激光炸弹覆盖区域的最大价值等。这两种算法能有效处理大数据量问题,是算法竞赛中的必备技能。
2026-03-31 22:09:17
379
原创 从零理解二分查找:新手入门教程
二分查找是一种高效的有序数组查找算法,通过不断折半缩小查找范围,平均时间复杂度为O(logn)。其核心是维护左右边界和中间值,通过比较中间值与目标值来调整边界。C++实现时需注意边界条件和整数溢出问题。二分查找扩展应用是二分答案,用于解决"最大值最小化"等问题,关键在于设计判断函数check()。新手需注意数组有序性、边界收缩和区间定义等常见错误。二分查找适用于有序数据查询,二分答案则适用于优化问题求解。
2026-03-26 23:21:18
671
原创 算法复杂度(入门讲解)
算法复杂度分析是评估算法效率的核心工具,分为时间复杂度和空间复杂度。时间复杂度衡量算法执行时间随输入规模n的增长趋势,采用大O表示法,常见类型包括O(1)、O(logn)、O(n)、O(n²)和O(2ⁿ)。空间复杂度分析算法额外内存使用情况,同样关注增长量级。二者常存在权衡关系:时间优化可能增加空间消耗,反之亦然。分析时需关注最坏情况,通过加法规则(顺序执行)和乘法规则(嵌套执行)计算复杂度。实际应用中应优先优化时间复杂度,同时兼顾空间效率,按”常对幂指阶“的优先级选择最优算法。
2026-03-25 00:34:25
681
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅