首页 > 其他分享 >单调栈理解

单调栈理解

时间:2022-10-06 11:14:45浏览次数:47  
标签:小于 遍历 递增 元素 栈顶 理解 单调

单调栈个人理解总结:
1.单调栈是用来解决这一类问题:寻找数组中元素其左或者右第一个大于或小于该元素的值。
2.首先,如果要寻找其右侧,要从右向左遍历。反之,从左向右遍历。
3.如果是寻找第一个大于该元素的值,则要在栈顶保存较小的值。即从栈底到栈顶是递减的(栈顶到栈底就是递增的)。如果寻找第一个小于该元素的值,则要在栈顶保存较大的值。从栈底到栈顶是递增的。
单调栈需要明确,我们想要获得的结果。不论是维护递增栈还是递减栈,在保持顺序入栈时,我们可以获得什么;在破坏单调顺序时,我们可以获得什么。
举例说明:如果我们想要获得一个数组中,其左和右第一个小于其的元素的索引。按最初的理解,需要从左到右和从右到左分别遍历一次。但是如果继续深入考虑一下:
如果从左到右遍历,维护一个单调递增的顺序,如果正常入栈的时候,显然我们可以获取入栈元素左边第一个小于其的索引。(栈顶元素小于当前元素,如果栈为空,则说明左侧没有小于当前元素的值)当破坏了栈的单调递增顺序,显然,我们可以获取出栈元素右边第一个小于该元素的索引。综上,只需一次遍历便可同时确定。

标签:小于,遍历,递增,元素,栈顶,理解,单调
From: https://www.cnblogs.com/NightVoyager233/p/16757196.html

相关文章

  • 深入理解linux内核第三版(三)中断和异常
    中断:也叫异步中断,是由外设产生的。异常:也叫同步中断,是由CPU产生的,是指令执行过程中产生的。中断信号的作用:中断信号提供了一种特殊的方式,使处理器转而去运行正常控制流之......
  • 从这两道题重新理解,JS的this、作用域、闭包、对象
    日常开发中,我们经常用到this。例如用Jquery绑定事件时,this指向触发事件的DOM元素;编写Vue、React组件时,this指向组件本身。对于新手来说,常会用一种意会的感觉去判断this的指......
  • 深入理解JS作用域链与执行上下文
    变量提升:变量提升(hoisting)。我可恨的var关键字:你读完下面内容就会明白标题的含义,先来一段超级简单的代码:<scripttype="text/javascript">varstr='Hello......
  • 深入理解AQS--jdk层面管程实现【管程详解的补充】
    什么是AQS1.java.util.concurrent包中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队列、独占获取、共享获取等,而这些行为的抽象就是基于AbstractQ......
  • 对话系统中的中文自然语言理解(NLU)
    当第一次看到自然语言理解的时候,我是感到困惑的。因为自然语言处理的目的就是要去理解人类产生的文本信息,从这个角度讨论,那应该所有的自然语言处理任务,都应该自然语言理解......
  • 从setTimeout理解JS运行机制
    序setTimeout()函数:用来指定某个函数或某段代码在多少毫秒之后执行。它返回一个整数,表示定时器timer的编号,可以用来取消该定时器。例子console.log(1);setTimeout(func......
  • POJ 3494 Largest Submatrix of All 1’s(单调栈)
    POJ3494LargestSubmatrixofAll1’s(单调栈)题意:​ 给出一个01矩阵,请找出其中最大的全部为1构成的子矩阵。矩阵大小为\(2000*2000\)思路:​ 我们把问题分解到每一......
  • 彻底理解内部类的使用(详细篇)
    这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战前言内部类相信大家都应该用过,但我也相信大家应该都只是很简单的使用。所以今天,就来详细讲解内部类的使用,废话不......
  • 一篇文章让你彻底理解Java的单例设计模式
    下文是笔者编写的单例模式实现的八种方式,如下所示:单例模式的简介我们将一个类在当前进程中只有一个实例的这种模式,称之为“单例模式”那么Java代码如何实现一个单例模式呢?......
  • 项目管理、项目质量概念的理解
     项目管理与软件开发的质量、效率、最终成果息息相关。   软件管理就是一位具有俯瞰全局意识的优秀软件管理人员领导和协调整个项目。软件项目的管理工作分位四个......