一、问题描述

二、解题思路
利用滑动窗口+哈希map来解决这个问题,map来记录窗口中元素出现的次数,map的键是窗口中的数,值为该数字在窗口中出现的次数。由于map的底层实现是红黑树,所以hash.rbegin()->first就是当前窗口中最大的数,将其加入ret向量即可。
三、代码实现
cpp
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
//滑动窗口+哈希表<数组元素(int),出现的次数(int)>
//特殊情况
vector<int> ret;
int n=nums.size();
if(n<k) return ret;
//正常情况
map<int,int> hash;
//窗口扩张
int left=0,right=-1;
for(int i=0;i!=k;i++) hash[nums[++right]]++;
int add=hash.rbegin()->first;
ret.push_back(add);
//窗口后移
for(int i=k;i!=nums.size();i++){
//添加最右侧的元素
hash[nums[++right]]++;
//剔除最左侧的元素
hash[nums[left]]--;
if(hash[nums[left]]==0) hash.erase(nums[left]);
left++;
//加入ret
add=hash.rbegin()->first;
ret.push_back(add);
}
return ret;
}
};