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

LeetCode: Min Stack 最小栈 Java

题目描述:

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

push(x) -- Push element x onto stack.

pop() -- Removes the element on top of the stack.

top() -- Get the top element.

getMin() -- Retrieve the minimum element in the stack.

设计一个最小栈,支持入栈,出栈,获取栈顶元素,获取栈最小值,要求时间复杂度0(1).

 

Stack(栈)是First in-Last out的数据结构。如果不考虑时间复杂度,实现题目的要求都比较简单,现在限定了不超过常量时间O(1),
就不能用简单的排序过滤实现了。

另外,栈顶(top)指的是允许操作数据的一端,要与堆栈中高低地址不同的栈顶和栈底区别开来,以前我经常搞混。

复制代码
public class MinStack {
    
    //声明数据栈
    private Stack<Integer> elementsStack=new Stack<Integer>();
    //声明辅助栈
    private Stack<Integer> supportStack=new Stack<Integer>();
    /**
     * 考虑到时间复杂度的需求,添加一个辅助栈,
     * 每次入栈时将元素分别存入数据栈和辅助栈,
     * 辅助栈中的数据始终保持最小值在栈顶,需要获取最小值时,直接Peek()辅助栈即可。
     */
    public static void main(String[] args){
        MinStack minStack=new MinStack();
//以下测试用例 minStack.push(
0); minStack.push(1); minStack.push(0); System.out.print(minStack.getMin()); minStack.pop(); System.out.print(minStack.getMin()); } public void push(int x) { //始终保持辅助栈顶是最小元素 if(supportStack.empty() || x <= supportStack.peek()){ supportStack.push(x); } elementsStack.push(x); } public void pop() { //更新辅助栈 if(elementsStack.peek().equals(supportStack.peek())){ supportStack.pop(); } elementsStack.pop(); } public int top() { return elementsStack.peek(); } public int getMin() { //辅助栈 return supportStack.peek(); } }
复制代码

 提交,可以AC.

相关文章:

  • HTTP 之 套接字
  • 使用注解属性绑定
  • Wind7外接显示器选择拓展模式后,鼠标只能往右移动才能切换到外接显示器上,不能修改切换方向...
  • 策略模式和工厂模式的区别
  • Regsvr32.exe 用法
  • 【转】js 获取浏览器高度和宽度值(多浏览器)
  • XML注释导致VS2005崩溃
  • Bugtags,最适合移动应用的智能 Bug 管理系统
  • Java开发
  • Git技巧:右键菜单怎么去除?
  • RTMFP vs RTMP
  • Linux Distribution / ROM
  • android Git命令家底儿及Git数据通信原理详解
  • directsound抓取麦克风PCM数据封装类
  • spring 下载地址
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • AHK 中 = 和 == 等比较运算符的用法
  • C学习-枚举(九)
  • JavaScript 基础知识 - 入门篇(一)
  • Laravel Telescope:优雅的应用调试工具
  • Linux Process Manage
  • ng6--错误信息小结(持续更新)
  • ucore操作系统实验笔记 - 重新理解中断
  • vue-cli3搭建项目
  • vuex 学习笔记 01
  • WePY 在小程序性能调优上做出的探究
  • 产品三维模型在线预览
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 技术胖1-4季视频复习— (看视频笔记)
  • 将 Measurements 和 Units 应用到物理学
  • 开源SQL-on-Hadoop系统一览
  • 项目管理碎碎念系列之一:干系人管理
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #14vue3生成表单并跳转到外部地址的方式
  • (C语言)fgets与fputs函数详解
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (九)One-Wire总线-DS18B20
  • (十八)三元表达式和列表解析
  • (转)3D模板阴影原理
  • (转)关于pipe()的详细解析
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • ?php echo ?,?php echo Hello world!;?
  • @SuppressWarnings注解
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [<死锁专题>]
  • [AIGC] Redis基础命令集详细介绍
  • [Android Pro] AndroidX重构和映射
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [C#小技巧]如何捕捉上升沿和下降沿
  • [CSS]CSS 字体属性