当前位置: 首页 > ai >正文

优化技巧--滑动窗口

目录

1.滑动窗口的作用

2.核心步骤📍

3.代码模板

4.手动演示推导过程📍

5.例题


1.滑动窗口的作用

维护数组中特定区间(窗口)内元素特性(如最大值、最小值、和)。

2.核心步骤📍

步骤 1:初始化数据结构

  • 双端队列 deque<int> q:存储元素下标,确保队列中对应的元素值单调递减(维护最大值)或递增(维护最小值)。

  • 结果数组 vector<int> res:存储每个窗口的极值。

步骤 2:遍历数组

对每个元素执行以下操作:

步骤 3:移除窗口外的过期元素

  • 若队头元素下标小于当前窗口左边界 i - k + 1,说明该元素已超出窗口范围,弹出队头。

  • 作用:确保队列中的元素均在当前窗口内。

步骤 4:维护队列单调性

  • 维护最大值(降序队列)若当前元素 nums[i] 大于等于队尾元素对应的值,则弹出队尾,直到队列为空或队尾元素值大于 nums[i]

  • 维护最小值(升序队列)若当前元素 nums[i] 小于等于队尾元素对应的值,则弹出队尾,直到队列为空或队尾元素值小于 nums[i]

  • 作用:确保队列中的元素值单调递减 / 递增,队头即为当前窗口的极值。

步骤 5:当前元素入队

将当前元素下标 i 加入队尾。

步骤 6:窗口形成后记录结果

  • 当遍历到第 k-1 个元素后,窗口大小达到 k,开始记录队头元素对应的值作为当前窗口的极值。

3.代码模板

#include <vector>
#include <deque>
using namespace std;// 滑动窗口最大值模板
vector<int> slidingWindowMax(const vector<int>& nums, int k) {deque<int> q; // 存储下标,队首始终是窗口的最大值下标vector<int> res;int n = nums.size();for (int i = 0; i < n; ++i) {// 移除窗口外的元素(左端点滑出)while (!q.empty() && q.front() <= i - k)q.pop_front();// 保持队列单调递减while (!q.empty() && nums[q.back()] <= nums[i])q.pop_back();// 当前元素入队q.push_back(i);// 记录当前窗口的最大值(队首为最大值)if (i >= k - 1) // 确保窗口已经形成res.push_back(nums[q.front()]);}return res;
}

4.手动演示推导过程📍

nums = [1, 3, -1, -3, 5, 3, 6, 7]
k = 3

    5.例题

    http://www.xdnf.cn/news/11973.html

    相关文章:

  1. AI物体识别原理综述与Auto Drive实践
  2. 光学系统常用光学参数的测量
  3. 武汉火影数字|互动多媒体展项打造:开启沉浸式互动体验
  4. python打卡训练营打卡记录day44
  5. ShardingSphere 如何解决聚合统计、分页查询和join关联问题
  6. 导出onnx的两种方法
  7. 高性能图片优化方案
  8. 使用PyInstaller将Python脚本打包成可执行文件
  9. C++抽象类与多态实战解析
  10. [leetcode ] 5.29week | dp | 组合数学 | 图 | 打家劫舍
  11. 68 VG的基本信息查询
  12. SQL 中 JOIN 的执行顺序优化指南
  13. RAMSUN分享全新超值型MM32F0050系列MCU
  14. 理解继承与组合的本质:Qt 项目中的设计选择指南
  15. 如何量化创新项目的成功标准
  16. js鼠标事件大全
  17. 滚珠导轨在光学设备中如何实现微米级运动?
  18. 简单网络拓扑实验
  19. 第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
  20. 30 C 语言递归算法详解:基准条件、递归逻辑、循环对比、经典案例(斐波那契、猴子吃桃、汉诺塔、二分查找等)
  21. Maskrcnn网络结构学习
  22. Ubuntu更新国内源
  23. Python 训练营打卡 Day 43
  24. Vue前端篇——项目目录结构介绍
  25. NER实践总结,记录一下自己实践遇到的各种问题。
  26. 【linux】全志Tina预编译一个so库文件到根文件系统/usr/lib/下
  27. 拉深工艺模块——回转体拉深件毛坯尺寸的确定(二)
  28. Vue2 和 Vue3 常见 CSS 样式归纳总结
  29. PyTorch——优化器(9)
  30. 近几年字节飞书测开部分面试题整理