浅谈单调队列、单调栈
初谈这个话题,相信许多人会有一种似有所悟,但又不敢确定的感觉。没错,这正是因为其中“单调”一词的存在,所谓单调是什么,学过函数的people都知道单调函数或者函数的单调性,直白一点说单调就是一直增或一直减。例如:1,3,5,9就是一个单调增数列,数列中不存在后一个数比前一个数小的现象。那么同样,在这里谈到的话题也有类似特点。
先说一下单调队列吧! 单调队列,就是一个符合单调性质的队列,它同时具有单调的性质以及队列的性质。他在编程中使用频率不高,但却占有至关重要的地位。它的作用很简单,就是为了维护一组单调数据,让我们在运行的过程中能够快速寻求前k个或后k个中最大或最小的值。 至于单调栈,相信看完上面的叙述后,都会有一个大概的理解,单调栈就是一个符合单调性质的栈它同时具有单调的性质以及栈的性质。在作用方面两者是相同的,差别仅是在编程过程中所维护的数组的方式不同。
下面我会举个简单的列子来解释单调队列及单调栈。
例题:有一组数据1,5,9,4,7,8,6,他们会依此输入,同时,在某一时刻会让你求出后n个数中的最大值。
根据题意,我们可以得出这样一个结论,若后一个数大于前一个数,则结果必定不会是前一个数(比如现在输入了1,5,由于1<5,所以无论是后几个数中的最大值均不会为1),因此,我们只需维护一个单调递减的数组便可快速求得所需之。(数组变化如下:输入——1,数组——1;输入——5,由于5>1删去1添入5,数组——5;输入——9,由于9>5删去5添入9,数组——9;输入——4,由于4<9直接添入,数组——9,4;输入——7,由于7>4同时7<9因此删去4添入7,数组——9,7;输入——8,由于8>4同时8<9因此删去7添入8,数组——9,8;输入——6,由于6<8直接添入,数组——9,8,6。)
单调队列及单调栈的基础也就这些,剩下的就只剩下个人理解及练习了。推荐几道题,在大视野上的1012以及1047,其中1012比较裸适合初学者做,1047略有难度推荐做完1012后再做。(在这里给个提示,1047要用到两次单调队列、单调栈,横着一次再用结果竖这一次。)
以上就是本文的全部内容了,希望对你有所帮助。
上一篇:C语言获取消耗内存的方法
栏 目:C语言
下一篇:用C语言来实现一个简单的虚拟机
本文标题:浅谈单调队列、单调栈
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/2996.html
您可能感兴趣的文章
- 01-10浅谈C/C++中的static与extern关键字的使用详解
- 01-10进程间通信之深入消息队列的详解
- 01-10浅谈内联函数与宏定义的区别详解
- 01-10用C++实现队列的程序代码
- 01-10探讨:用两个栈实现一个队列(我作为面试官的小结)
- 01-10C++中用两个标准容器stack,实现一个队列的方法详解
- 01-10浅谈C++中的string 类型占几个字节
- 01-10浅谈关于指针作为参数并改变它的值的问题
- 01-10浅谈C#互操作的内存溢出问题
- 01-10优先队列(priority_queue)的C语言实现代码
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10delphi制作wav文件的方法
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-10C#中split用法实例总结
- 01-10SublimeText编译C开发环境设置
- 04-02jquery与jsp,用jquery
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-11ajax实现页面的局部加载