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

滑动窗口的最大值

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;
        }
};

全部评论

相关推荐

09-08 17:17
同济大学 Java
狗不理fe:里面的人劝一句,别来虾,我们部门24校招生淘汰率30%,还有一些人说有一年保护期,不可能!!!
我的秋招日记
点赞 评论 收藏
分享
野猪亨利a:基本上不会有下一步
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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