滑动窗口
文章平均质量分 79
纳兰青华
一个专注于写程序的疯子
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
加油站问题:环形数组中的良好出发点
本文介绍了环形加油站问题的优化解法。题目要求在给定加油站油量和距离数组的情况下,找出所有能够完成一圈行驶的出发点(良好出发点)。相比暴力解的O(N²)复杂度,文章提出了使用前缀和与单调队列的O(N)优化方案: 构建扩展净油量数组(长度2N)并计算前缀和 使用单调队列维护滑动窗口最小值 对每个起始点i,检查窗口[i,i+N-1]内最小值是否≥prefix[i-1] 该算法通过环形数组扩展、前缀和转换和单调队列优化,将时间复杂度从O(N²)降为O(N)。原创 2026-06-18 00:18:58 · 306 阅读 · 0 评论 -
滑动窗口进阶:统计满足条件的子数组数量
滑动窗口进阶:统计满足条件的子数组数量 本文介绍了一种高效算法,用于统计数组中满足"子数组最大值与最小值之差≤num"条件的子数组数量。核心思路是结合滑动窗口和单调队列: 使用双指针(L,R)维护窗口,两个单调队列分别跟踪窗口内的最大值和最小值 对于每个左边界L,尽可能扩展右边界R,直到不满足条件 统计以L为左边界的有效子数组数量为R-L 时间复杂度从暴力解法的O(n³)优化到O(n) 算法关键点在于利用单调队列高效维护窗口极值,并利用极值差的单调性避免不必要的计算。原创 2026-06-17 00:22:53 · 227 阅读 · 0 评论 -
滑动窗口最大值问题:单调队列的巧妙应用
本文介绍了使用单调队列高效解决滑动窗口最大值问题的方法。通过维护一个单调递减的双端队列存储元素索引,算法能在O(n)时间复杂度内找到每个窗口的最大值。关键步骤包括:1)维护队列单调性,移除小于新元素的队尾元素;2)检查队首元素是否超出窗口范围;3)当窗口形成时记录队首最大值。相比暴力解法的O(n×w)复杂度,这种优化方案显著提升了效率,特别适合处理大规模数据。文章结合示例详细演示了算法执行过程,并分析了复杂度,最后总结了单调队列在滑动窗口问题中的通用性。原创 2026-06-16 00:31:09 · 373 阅读 · 0 评论
分享