0
点赞
收藏
分享

微信扫一扫

leetcode-239-滑动窗口最大值

吴wuwu 2022-01-17 阅读 70

题目链接:https://leetcode-cn.com/problems/sliding-window-maximum/

题目内容

碎碎念

双端队列+滑动窗口

在上述滑动窗口形成及移动的过程中,我们注意到元素是从窗口的右侧进入的,然后由于窗口大小是固定的,因此多余的元素是从窗口左侧移除的。 一端进入,另一端移除,这不就是队列的性质吗?所以,该题目可以借助队列来求解。

队列:单调不递增队列,例如3,3,1这样。

代码

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {

        deque<int> q;
        vector<int> max_num(nums.size()-k+1,0);
        int right=0;
        int index=0;
        while(right<nums.size()){
            //确保队首元素一定最大
            while(!q.empty()&&q.back()<nums[right]){
                q.pop_back();
            }
            q.push_back(nums[right]);
            right++;
            //窗口满足要求  
            if(right>=k){
            // 最大值就是队首元素
                max_num[index++]=q.front();
            // 如果队首元素恰好是窗口左边缘元素,则出队
                if(q.front()==nums[right-k]){
                    q.pop_front();
                }
            }
        }
        return max_num;
        // int left=0,right=k;
        // int max_num=nums[0]; 
        // vector<int> maxNum;
        // deque<int> q;
        // while(right<=nums.size()){
        //     max_num=nums[left];
        //     for(int i=left;i<right;i++){
        //     max_num=max(max_num,nums[i]);
        //     }
        //     maxNum.push_back(max_num);
        //     right++;
        //     left++;
        // }
        // return maxNum;
    }
};


参考链接

  • https://leetcode-cn.com/problems/sliding-window-maximum/solution/dong-hua-yan-shi-dan-diao-dui-lie-239hua-hc5u/
  • 滑动窗口算法基本原理与实践 - huansky - 博客园
举报

相关推荐

0 条评论