【剑指Offer】面试题65:滑动窗口的最大值
来源:互联网 发布:快递免费数据管理软件 编辑:程序博客网 时间:2024/05/16 04:08
整理自剑指Offer
牛客网https://www.nowcoder.com/questionTerminal/1624bc35a45c42c0bc17d17fa0cba788
一:题目描述
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。
二:解题思路
用一个两端开口的队列实现,并不是把滑动窗口的每一个数值存入队列中,而只是把有可能称为滑动窗口最大值的数值存入两端开口的队列中
deque两端开口的队列,用来保存可能是滑动窗口最大值的下标。
1.在存入一个数字下标前,首先要判断队列里已有的数字是否小于待存入的数字,如果已有的数字小于待存的数字,这些数字已经不可能是滑动窗口的最大值,因此他们将依次从队尾部分删除
2.如果队头元素已经从窗口里滑出,滑出的数字也需要从队列的头部删除。
三:代码实现
class Solution {public: vector<int> maxInWindows(const vector<int>& num, unsigned int size) { vector<int > result; deque<int> s;//两端开口的队列 for(int i=0;i<num.size();i++){ //back():取队列队尾元素 //pop_back();队尾元素出队 //pop_front():队首元素出队 //从后面依次弹出队列中比当前num值小的元素,同时也能保证队列首元素为当前窗口最大值下 while(s.size() && num[s.back()]<=num[i]){ s.pop_back(); } //当前窗口移出队首元素所在的位置,即队首元素坐标对应的num不在窗口中,需要弹出 while(s.size() && (i-s.front()+1)>size){ s.pop_front(); } s.push_back(i);//每次滑动的num下标加入队列 //当滑动窗口首地址i大于等于size时才开始写入窗口最大值 if(size && i+1>=size) result.push_back(num[s.front()]); } return result; }};
阅读全文
0 0
- 【剑指Offer学习】【面试题65:滑动窗口的最大值】
- 剑指offer--面试题65:滑动窗口的最大值
- 剑指Offer系列-面试题65:滑动窗口的最大值
- 剑指offer-面试题65-滑动窗口的最大值
- 【剑指Offer】面试题65:滑动窗口的最大值
- 剑指offer 面试题65 滑动窗口的最大值
- 《剑指Offer》学习笔记--面试题65:滑动窗口的最大值
- 剑指Offer面试题65:滑动窗口的最大值 Java实现
- 剑指offer——面试题65:滑动窗口的最大值
- 面试题65:滑动窗口的最大值
- 面试题65:滑动窗口的最大值
- 面试题65:滑动窗口的最大值
- 【剑指offer】面试题59(1):滑动窗口的最大值
- 剑指offer 65 - 滑动窗口的最大值
- 《剑指offer》:[65]滑动窗口的最大值
- 面试题72:滑动窗口的最大值
- 面试题65. 滑动窗口的最大值
- 《剑指offer》滑动窗口的最大值
- LeetCode 650 2 Keys Keyboard
- Elasticsearch Network Settings
- 第一篇博客
- jQuery实现菜单的隐藏和显示
- Uva 10474(lower_bound()的使用) 大理石在哪
- 【剑指Offer】面试题65:滑动窗口的最大值
- 按钮被点击后屏蔽点击且倒计时60S能再次被点击和JS实现和JQuery实现
- lucene-架构
- #import、#include、@import modules区别
- 欧拉函数
- HTML总结
- mysql存储过程与函数-----第一章
- 寻找多元素
- MySQL性能分析和优化