剑指offer 滑动窗口的最大值
来源:互联网 发布:烈焰遮天源码 编辑:程序博客网 时间:2024/05/17 04:11
1、题目
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};
2、分析
用双端队列存放滑动窗口可能的最大值的下标。注意:是下标,因为需要判断元素是否被移出了窗口。
移动窗口时:
1)若最大值被移出窗口,需要删除最大值
2)若新加入的元素比队尾的元素大,则比该元素小的其他元素不可能成为最大值,依次移除这些元素,把新元素加入队列
3)若新加入的元素比队尾的元素小,该元素也有可能会成为最大值,把它加入队列
3、代码
void maxOfWindow(vector<int> nums, int k) { vector<int> window; if (nums.size() > k&&k >= 1) { deque<int> index; for (int i = 0; i < k; i++) {//第一个滑动窗口 while (!index.empty() && nums[index.back()] <= nums[i]) index.pop_back();//最大元素下标 index.push_back(i); } for (int i = k; i < nums.size(); i++) { window.push_back(nums[index.front()]);//队首保存最大元素下标 while (!index.empty() && nums[index.back()] <= nums[i]) index.pop_back(); if (!index.empty() && index.front() <= i - k) index.pop_front(); index.push_back(i); } window.push_back(nums[index.front()]); } for(int x:window) cout<<x<<" "; cout << endl;}
阅读全文
0 0
- 剑指offer 65 - 滑动窗口的最大值
- 《剑指offer》滑动窗口的最大值
- 剑指offer—滑动窗口的最大值
- 剑指offer:滑动窗口的最大值
- 剑指offer:滑动窗口的最大值
- [剑指offer]滑动窗口的最大值
- 《剑指offer》:[65]滑动窗口的最大值
- 剑指Offer--065-滑动窗口的最大值
- 剑指offer-滑动窗口的最大值
- 【剑指offer】滑动窗口的最大值
- 《剑指Offer》 滑动窗口的最大值
- 剑指offer-64.滑动窗口的最大值
- 剑指offer-滑动窗口的最大值
- 剑指offer 滑动窗口的最大值
- 剑指offer—滑动窗口的最大值
- 剑指offer — 滑动窗口的最大值
- 剑指offer 滑动窗口的最大值
- 滑动窗口的最大值(STL的应用+剑指offer)
- VR干货:如何将你的游戏上架Oculus PSVR VIVE等平台
- 三网 —— 计算机网络、电信网络、广播电视网络(移动网络)
- Java基础之集合框架--Collections的fill()方法和replaceAll()方法
- 中国经济正站在新周期的起点上
- vue请求接口第一次成功,第二次失败
- 剑指offer 滑动窗口的最大值
- centos7下 源码安装 apache记录
- First Bleed
- JZ2440 Uboot 启动过程分析续
- java鬼混笔记:shiro 10、在线用户、踢人下线、唯一登录
- 对String不可变的理解
- SQL Server @@ERROR 用法
- 丑哭了CSDN。
- 20170917软件工程师在线笔试之员工幸福感问题