当前位置: 首页 > 编程笔记 >

浅谈单调队列、单调栈

冯峻
2023-03-14
本文向大家介绍浅谈单调队列、单调栈,包括了浅谈单调队列、单调栈的使用技巧和注意事项,需要的朋友参考一下

初谈这个话题,相信许多人会有一种似有所悟,但又不敢确定的感觉。没错,这正是因为其中“单调”一词的存在,所谓单调是什么,学过函数的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要用到两次单调队列、单调栈,横着一次再用结果竖这一次。)

以上就是本文的全部内容了,希望对你有所帮助。

 类似资料:
  • 一、什么是单调栈和单调队列? (1)单调栈 从名字上就听的出来,单调栈中存放的数据应该是严格单调有序的,具有以下两个性质。 1. 满足从栈顶到栈底的元素具有严格的单调递增或单调递减性; 2. 满足栈的后进先出特性,即越靠近栈底的元素越早进栈。 单调栈也分为单调递增栈和单调递减栈。 1. 单调递增栈:单调递增栈就是从栈底到栈顶数据是从小到大 2. 单调递减栈:单调递减栈就是从栈底到栈顶数据是从大到小

  • 本文向大家介绍浅谈php调用python文件,包括了浅谈php调用python文件的使用技巧和注意事项,需要的朋友参考一下 关于PHP调用Python数据传输问题 这是以前大学时做项目出现的问题,现在把它挪上来,希望给遇到问题的未来大佬给出一些小的思路,请大佬们不要大意的帮我改正,如果出现问题或者有更好的解决方法,希望大家可以给出,谢谢! 以前小组开展项目实训,我们小组选择的是大数据分析,其中有一

  • 本文向大家介绍浅谈window.onbeforeunload() 事件调用ajax,包括了浅谈window.onbeforeunload() 事件调用ajax的使用技巧和注意事项,需要的朋友参考一下 经常有这样的需求,就是在离开某个web页面时,用户不一定点注销,这样会导致会话不能及时销毁。为实现用户离开页面时,自动注销功能,需要在web页面的onbeforeunload事件处理函数中发送注销命令

  • MQ 简单队列实战 [ ] 模型: >[danger] P 是我们的生产者 > 中间的框是一个队列,代表消费者保留的消息缓冲区。 > C 是我们的消费者 代码演示: 'use strict'; const Controller = require('egg').Controller; /** * 一对一队列演示 */ // 频道名称 const queueName = 'hasone' c

  • 本文向大家介绍浅谈vue 单文件探索,包括了浅谈vue 单文件探索的使用技巧和注意事项,需要的朋友参考一下 在很多Vue项目中,我们使用 Vue.component 来定义全局组件,紧接着用new Vue({ el: '#container '}) 在每个页面内指定一个容器元素。 这种方案在只是使用 JavaScript 增强某个视图的中小型项目中表现得很好。然而在更复杂的项目中,或者当你的前端完

  • 我刚刚在Codity遇到了一个任务,我找不到目标O(n)效率的解决方案;我的解决方案运行为O(n2)。如果有人能给我一个提示,告诉我如何让它运行得更快,我会非常高兴。这是任务。 给出了一个由N个整数组成的非空零索引数组A。 monotonic_pair是一对整数 (P, Q),使得 0 ≤ P ≤ Q 目标是找到指数相距最远的monotonic_pair。更准确地说,我们应该最大化Q-P值。只找到