当前位置: 首页 > news >正文

数据结构: 最小栈

最小栈的特色是保持栈后进先出的特性,同时能够以O(1)复杂度获得当前栈的最小值。

栈是比较好实现的,直接搞个链表,从头部删除和添加即可。

最小栈的核心逻辑是:

因为栈是后进先出的,因此栈顶元素之下的数字永远在栈顶元素之后弹出。

那么当前栈中的最小值, 在栈插入每个元素的过程中,对比一次即可确定下来。

但是在某个元素弹出后,栈中最小值有可能就变了。其最小值的变化和栈顶元素的变化是同步的。因此,可以引入一个辅助栈,

性质1: 辅助栈中的每个元素存储对应主栈中某个元素作为栈顶时的最小值。

操作

push

栈中添加元素时,对比辅助栈栈顶和当前插入元素的大小,确定最小值压入辅助栈。

pop

弹出元素时,因为辅助栈栈顶也应一并弹出,为了维持性质1

top

getMin

直接获取辅助栈栈顶元素

Code

class MinStack {public Stack<Integer> aux;public Stack<Integer> main;public MinStack() {aux = new Stack<>();main = new Stack<>();aux.push(Integer.MAX_VALUE);}public void push(int val) {main.push(val);if (val < aux.peek()){aux.push(val);}else{aux.push(aux.peek());}}public void pop() {main.pop();aux.pop();}public int top() {return main.peek();}public int getMin() {return aux.peek();}
}

Reference List

  1. https://leetcode.cn/problems/min-stack/solution/zui-xiao-zhan-by-leetcode-solution/
http://www.lryc.cn/news/25986.html

相关文章:

  • STM32之PWM
  • 操作系统(1.1)--引论
  • Spring boot + mybatis-plus 遇到 数据库字段 创建不规范 大驼峰 下划线 导致前端传参数 后端收不到参数 解决方案
  • JavaScript String 字符串对象
  • Lazada如何做好店铺运营?产品定价是关键
  • 空口协议Eapol、802.11 Action、802.11 BAR 和 802.11BA、802.11 Encrypted Data讲解
  • C++类和对象
  • Leetcode.面试题 05.02 二进制数转字符串
  • UDPTCP网络编程
  • 【微信小程序】-- 全局配置 -- tabBar(十七)
  • Cortex-A7中断控制器GIC
  • JavaSE:常用类
  • Element中树形控件在项目中的实际应用
  • kaggle RSNA 比赛过程总结
  • 51单片机入门————LED灯的控制
  • J - 二进制与、平方和(线段树 + 维护区间1的个数)
  • BertTokenizer的使用方法(超详细)
  • 深度学习编译器CINN(3):编译过程中遇到的问题总结
  • yum 安装mysql8数据全过程
  • 内网vCenter部署教程一
  • java 进阶—线程的常用方法
  • hadoop的运行模式
  • 服务器(centos7.6)已经安装了宝塔面板,想在里面安装一个SVN工具(subversion),应该如何操作呢?
  • 从智能进化模型看用友BIP的AI平台化能力
  • 项目管理的主要内容包括哪些?盘点好用的项目管理系统软件
  • Allegro如何查看PCB上器件的库路径操作指导
  • 笔记【尚硅谷】大数据Canal教程丨Alibaba数据实时同步神器
  • 如何重定向命令行日志信息到指定txt文件?
  • 物理机不能访问虚拟机kali的web服务解决方案记录
  • 服务器配置 | 在Windows本地显示远程服务器绘图程序