• 【单调队列】


    单调队列知识点

    相关例题

    在这里插入图片描述
    在这里插入图片描述

    核心概念

    • 什么是单调队列?
      简单来说,用双端队列deque去实现一个从左自右的递增队列,做法是每次从队尾插入元素的时候从队尾依次把比当前元素小的元素全部出队。以保证队列是一个递减的队列。
    • 单调队列的使用场景是什么?
      滑动窗口区间最值问题,配合单向队列使用。
    • 关键点?
      • 每次插入元素要注意依次删除队尾的小元素
      • 滑动窗口移动的时候最左侧的边界元素需要出队,这个时候辅助单向队列需要pop()如果pop()的元素和deque的首元素相同则deque也同样要出队。

    代码实现

    以下是Offer59题 ,学习方法和并查集一样,会用就能理解。注意脑海中建模单调队列的运行原理。

    class Solution {
    public:
        //monotonic queue
        deque dq;
        queue q;
    	void enqueue(int ele){
    		while(!dq.empty() && dq.back() < ele)
    			dq.pop_back();
    		dq.push_back(ele);
    		q.push(ele);
    	}
    	int max_value(){
    		return dq.front();
    	} 
    	void popque(){
    		int f=q.front();
    		q.pop();
    		if(f == dq.front())
    			dq.pop_front();
    	}
        vector maxSlidingWindow(vector& nums, int k) {
        	vector ans;
            for(int i = 0; i < nums.size() && i < k; ++i)
            	enqueue(nums[i]);
            if(k>=nums.size()){
            	int vx=max_value();
            	return vector{vx};
    		}
            ans.push_back(max_value());
            	
    		int pos = k;
    		for(;pos
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
  • 相关阅读:
    数据结构实验之队列(文末附完整代码)
    【零基础学QT】第四章 控件学习方法,问卷调查小界面
    Apache服务器优化
    CM311-1a_CH_S905L3A_安卓9.0_纯净线刷固件包
    循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
    美国专线物流详解:美国专线物流有哪些平台
    【JavaEE】进程与线程的创建
    su root提示认证失败,无法sudo,锁屏后提示密码不对
    Python传参拷贝问题
    Intellij IDEA--解决项目名后带中括号的问题
  • 原文地址:https://blog.csdn.net/qq_37225146/article/details/126604165