力扣热题100 滑动窗口最大值

发布时间:2024年01月24日

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

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

解法:单调队列经典题目,保持一个单调递增或者单调递减的队列,让队头永远是当前窗口的最大值或者最小值,那么有这样的性质,后面遍历的元素,只有比窗口的所有元素小,才能入队,否则将窗口里所有比他小的出队,才能保证队头永远是当前窗口的最大值或者最小值。

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        int q[100010];
        int hh = 0,tt = -1;
        vector<int>ans;
        for(int i =0;i<nums.size();i++){
            if(hh<=tt&&i-q[hh]>=k)hh++;
            while(hh<=tt&&nums[i]>=nums[q[tt]])tt--;
            q[++tt]=i;
            if(i>=k-1)ans.push_back(nums[q[hh]]);
        }
        return ans;
    }
};

文章来源:https://blog.csdn.net/weixin_63022020/article/details/135748747
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。