数据结构:
单调下降的双端队列 ——》窗口的最大值
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
deque <int> MaxWindow;
vector<int> res;
if(nums.empty()) return res;
if(k == 1) return nums;
for(int i = 0; i < nums.size(); i++){
// windows i - k + 1 ~ i
if(MaxWindow.empty()){
MaxWindow.push_back(i);
continue;
}
// 判断 窗口内最大元素是不是有效
if(i - MaxWindow.front() >= k) MaxWindow.pop_front();
// 当前 将所有不可能的成为最大值的数弹出 保证窗口最前端就是当前窗口的最大值
while(!MaxWindow.empty() && nums[i] >= nums[ MaxWindow.back()]){
MaxWindow.pop_back();
}
MaxWindow.push_back(i);
if(i >= k - 1 ){
res.push_back(nums[MaxWindow.front()]);
}
}
return res;