模拟窗口滑动的过程,用一个数组来记录滑动窗口内的值,一个数组来记录最大值。每次窗口滑动都将最大值数组的队尾压入结果栈,最后返回结果栈。
这题要做出来并不难,难在追求优秀的时间复杂度和空间复杂度。感觉这个代码还有较大改进空间。欢迎讨论。

class Solution {
public:
    vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
        vector<int> result;
        if(size == 0 || size > num.size()){
            return result;
        }
        vector<int> que;
        queue<int> max;
        for(int i = 0;i < num.size();i++){
            if(que.size() < size){
                que.push_back(num.at(i));
                if(max.empty()){
                    max.push(num.at(i));
                }
                else{
                    if(num.at(i) > max.back()){
                        max.push(num.at(i));
                    }
                }
                if(i == size - 1){
                    result.push_back(max.back());
                }
                continue;
            }
            else{
                int front = que.front();
                que.erase(que.begin());
                if(front == max.front()){
                    max.pop();
                }
                que.push_back(num.at(i));
                if(max.empty()){
                    int imax = que.front();
                    for(int i = 1;i < que.size();i++){
                        if(que.at(i) > imax){
                            imax = que.at(i);
                        }
                    }
                    max.push(imax);
                }
                else if(num.at(i) > max.back()){
                    max.push(num.at(i));
                }
                result.push_back(max.back());
            }
        }
        return result;
    }
};