待优化

    1. vector<int> maxInWindows(const vector<int>& num, unsigned int size)
    2. {
    3. deque<int> win;
    4. vector<int> ans;
    5. int _max = INT_MIN;
    6. if(num.size() < size || size == 0)return ans;
    7. for(int i = 0;i < num.size();i++){
    8. if(win.size() < size)win.push_back(num[i]);
    9. else{
    10. for(int j = 0;j < size;j++)_max = max(_max, win[j]);
    11. ans.push_back(_max);
    12. win.pop_front();
    13. win.push_back(num[i]);
    14. _max = INT_MIN;
    15. }
    16. }
    17. for(int j = 0;j < size;j++)_max = max(_max, win[j]);
    18. ans.push_back(_max);
    19. return ans;
    20. }
        //单调队列
        vector<int> maxInWindows(const vector<int>& num, int W)
        {
            if(W == 0)return {};
            int N = num.size();
    
            vector<int> ret;
            list<int> L;
            for(int i = 0 ; i < N ; ++i){
                //从队尾删除比num[i]小的数
                while(!L.empty() && num[*L.rbegin()] < num[i])
                    L.pop_back();
    
                //将i加入队尾
                L.push_back(i);
    
                //从队首删除过期的数
                while(!L.empty() && (*L.begin() <= i - W))
                    L.pop_front();
    
                //将以i结尾的区间最值加入答案
                if(i >= W - 1)
                    ret.push_back(num[*L.begin()]);
            }
            return ret;
        }