【数据结构与算法拓展】 单调队列原理及代码实现

本文介绍了单调队列的概念及其在数据结构和算法中的应用场景。通过逐步优化,从朴素算法到最终的高效实现,展示了如何维护一个保持元素单调性的队列,并给出了C++代码实现。此外,还探讨了单调队列在处理大规模数据时的高效性。
摘要由CSDN通过智能技术生成

前言

数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷。

也因如此,它作为博主大二上学期最重要的必修课出现了。由于大家对于上学期C++系列博文的支持,我打算将这门课的笔记也写作系列博文,既用于整理、消化,也用于同各位交流、展示数据结构的美。

此系列文章,将会分成两条主线,一条“数据结构基础”,一条“数据结构拓展”。“数据结构基础”主要以记录课上内容为主,“拓展”则是以课上内容为基础的更加高深的数据结构或相关应用知识。

欢迎关注博主,一起交流、学习、进步,往期的文章将会放在文末。


应用场景及朴素算法

单调队列,顾名可以思议。它是一种队列,同时保持其元素顺序单调,它的使用场景需求通常为:

1.需要维护一个队列结构,支持元素的插入和删除
2.在任意时刻访问队列中元素的最大值
3.各操作的平均复杂度为O(1)

解决问题之前,我们先来定义一下本篇所使用的队的模型,为了便于操作,不妨使用数组和头尾下标来模拟队列:

class Queue{
   
private:
	int l;
	int r;
	int maxSize;
	int * element;
public:
	Queue(int maxSize){
   
		this->maxSize = maxSize;
		/*当队列为空时,r = l - 1*/
		l = 0;
		r = -1;
		element = new int[maxSize];
	}
	bool insert(int val){
   
		if(r >= maxSize - 1){
   
			return false;
		}
		element[++r] = val;
		return true;
	}
	bool pop(){
   
		if(r < l)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值