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

hot100 239.滑动窗口最大值

思路:利用单调队列维护滑动窗口。

1.右边入(元素进入队尾,同时维护队列的单调性)。

2.左边出(元素离开队首)。

3.记录/维护答案(根据队首)。

为什么代码中的队首离开窗口写的是if而不是while?

答:

这是因为窗口在一步一步地向右滑动(像只蜗牛),所以元素也是一个一个地离开窗口,不会出现同一轮循环中有多个元素离开窗口的情况。

附代码:

class Solution { public int[] maxSlidingWindow(int[] nums, int k) { int n = nums.length; int[] res = new int[n - k + 1]; //窗口个数 LinkedList<Integer> queue = new LinkedList<>(); for(int i = 0;i < n;i++){ //1.右边入 while(!queue.isEmpty() && nums[queue.getLast()] < nums[i]){ queue.removeLast(); //移除所有比当前元素小的元素,确保队列中的元素是单调递减的 } queue.addLast(i); //注意保存的是下标,这样下面可以判断队首是否离开窗口 //2.左边出(移除过期元素) int left = i - k + 1; //窗口左端点 if(queue.getFirst() < left){ //队首元素已不在窗口中,移除过期的队首元素 queue.removeFirst(); } //3.在窗口的左端点处记录答案 if(left >= 0){ //由于队首到队尾单调递减,所以窗口的最大值就在队首 res[left] = nums[queue.getFirst()]; } } return res; } }
http://www.cnnetsun.cn/news/163191.html

相关文章:

  • 50、多线程编程:任务控制与并行迭代
  • 51、多线程编程全解析
  • ML Workspace终极指南:5分钟搭建专业级机器学习环境
  • Langchain-Chatchat DevOps运维知识整合实践
  • Jetpack Compose响应式布局实战:构建自适应多屏Android应用
  • 端侧AI部署技术深度解析:从架构原理到行业实战
  • 30、构建安全、高效的企业级Web农场与数据仓库
  • Langchain-Chatchat数据安全法解读知识检索工具
  • React-Move 动画库终极指南:从入门到精通的完整实践手册
  • xPack OpenOCD 安装配置完全指南:快速搭建嵌入式调试环境
  • Langchain-Chatchat嵌入模型本地化部署要点
  • Proton-GE Wayland完全指南:解锁原生Linux游戏体验
  • Zed编辑器插件生态:完整指南与开发实战
  • CppMicroServices 终极指南:5步掌握C++模块化开发
  • SVG转Canvas渲染引擎终极指南:从零到精通的完整教程
  • Browser-Use Web-UI完全指南:让AI智能体在浏览器中自主工作的终极方案
  • Langchain-Chatchat科研辅助系统构建:论文资料智能问答平台
  • FastAPI蓝绿部署实战指南:实现零停机更新
  • Langchain-Chatchat能否支持视频文档解析?多媒体处理展望
  • 如何在3天内用TFLearn构建医疗AI预测模型:完整指南
  • 【第1章·第8节】自适应MPC控制器的simulink建模与仿真
  • C# 简介
  • S3Proxy加密机制深度解析:透明安全的云端数据保护方案
  • 如何用NixOS和Hyprland构建终极Linux桌面:完整配置指南
  • Erda云原生平台全面使用指南:从入门到精通
  • DeepSeek 快速生成周报与任务汇报:实习生的模板化效率指南
  • Dragonboat流控机制:构建亿级用户系统的稳定基石
  • 如何从零开始构建HTML验证工具:gumbo-parser终极指南
  • Langchain-Chatchat自动摘要生成能力拓展实验
  • 23.11.MQTT协议