题解 | #滑动窗口的最大值#

滑动窗口的最大值

https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788

#include <deque>
#include  <iostream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

class Solution {
public:
        vector<int> maxInWindows(const vector<int>& num, unsigned int size )
        {
            vector<int> ans;
          //队列中存储数组的下标  
		  deque<int> qe;
            int k = 0;
            //当窗口的大小为0时,直接返回一个空的数组
		  	if(size == 0)return ans;
            //遍历每个元素,相当于窗口从数组外面开始滑动(实现一个优先队列,最大的放在队头)
		  	for(int i = 0 ; i < num.size() ; i++  )
            {
              //先检测大小是否超过窗口
			  	if( !qe.empty() && i - qe.front() >= size ) qe.pop_front();
              //一直循环,直到最大值存在于队首 
			  while( !qe.empty() && num[i] > num[ qe.back() ] ) qe.pop_back();
              //不管怎么,当前遍历的元素一定会入队  
			  qe.push_back(i);
                k++;
				//当窗口全部进入数组后,开始向返回值输入。
                if(k >= size )ans.push_back(num[qe.front()] );
            }

            return ans;
        }
};

全部评论

相关推荐

10-09 16:12
门头沟学院 Java
帅宇殿下:佬,简历写的什么
点赞 评论 收藏
分享
迷茫的大四🐶:💐孝子启动失败,改为启动咏鹅
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务