一:暴力解法,能ac但是时间复杂度O(nk)
class Solution {public: vector maxSlidingWindow(vector & nums, int k) { int len=nums.size(); if(len==0) return {}; vector res; for(int i=0;i<=len-k;i++){ int key=nums[i]; for(int j=1;j
二,维护一个特殊的优先队列(使用deque实现)假设当前队列已经是优先队列(最大值在队首),而且这个队列是有序递减的,那么当新加入一个元素时执行两个操作,
1)检查队首下标是否合法,假如队首下标已经不在滑窗内,则将其弹出;
2)检查已有的队列中的元素是否比当前元素小,小的元素全部弹出。由于已经是按值有序递减的数列,那么只需要不断的比较末尾和当前元素,即可完成该项;
此时已经对新进入的元素维护好了一个最大元素下标在队首,元素下标按值有效递减,且下标从左到右是有序的的一个队列;获取队首元素可得当前滑窗的大小;
class Solution {public: vector maxSlidingWindow(vector & nums, int k) { if(nums.size()