239. 滑动窗口最大值

发布时间 2023-03-28 16:53:35作者: xiazichengxi

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回滑动窗口中的最大值。

class MyQueue{
public:
    //这个队列要保持里面的元素是递减的
    void push(int value)
    {
        while(!q.empty() && value > q.back())
        {
            q.pop_back();
        }
        q.push_back(value);
    }
    void pop(int value)
    {
        if(!q.empty() && value == q.front())
            q.pop_front();
    }
    int front()
    {
        return q.front();
    }
private:
    std::deque<int> q;
};

class Solution {
public:
    using size = vector<int>::size_type;
    
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        size i, j;
        i = 0;
        j = k-1 ;
        for(; i <= j ; i++)
        {
            que.push(nums[i]);
        }
        res.push_back(que.front());
        i = 0;
        for(;j < nums.size() - 1;)
        {
            que.pop(nums[i]);
            que.push(nums[j+1]);
            res.push_back(que.front());
            i++;
            j++;
        }
        return res;  
    }
private:
    MyQueue que;
    vector<int> res;
};

int main() {
    vector<int> vec = { 1,3,-1,-3,5,3,6,7 };
    Solution q;
    vector<int> res = q.maxSlidingWindow(vec, 3);
    for (auto a : res)
        cout << a << endl;
}