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

最小栈,力扣

目录

我们直接看题解吧:

题目:

解题方法:

难度分析:

审题目+事例+提示:

解题分析:

解题思路:

代码实现:

代码补充说明:  


题目地址:

155. 最小栈 - 力扣(LeetCode)

难度:简单

今天刷最小栈,大家有兴趣可以点上看看题目要求,试着做一下

我们直接看题解吧:

题目:

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

   MinStack() 初始化堆栈对象。
   void push(int val) 将元素val推入堆栈。
   void pop() 删除堆栈顶部的元素。
   int top() 获取堆栈顶部的元素。
   int getMin() 获取堆栈中的最小元素。

解题方法:

方法1、辅助栈

方法2、差值法

难度分析:

主要考察如何在常数时间内返回最小值

审题目+事例+提示:

在常数时间内检索到最小值

解题分析:

在实现方法中其他pop ,push,top等方法均能在常数时间内实现,但getmin()方法只利用现有的栈的话,则需要进行线性扫描整个栈来获得最小值,即无法在常数时间内实现题目要求,因此我们现有栈的基础上可以另外定义一个辅助栈,其栈顶元素保存最小值,与元素栈同步插入与删除。

解题思路:

1、当一个元素要入栈时,我们取当前辅助栈的栈顶存储的最小值,与当前元素比较得出最小值,将这个最小值插入辅助栈中;

2、当一个元素要出栈时,我们把辅助栈的栈顶元素也一并弹出;

3、在任意一个时刻,栈内元素的最小值就存储在辅助栈的栈顶元素中

代码实现:

class MinStack {
    Deque<Integer> xStack;   //注意,Deque是一个接口
    Deque<Integer> minStack; //定义双端Deque双端队列作为元素栈与辅助栈

    public MinStack() {
        xStack = new LinkedList<Integer>();      //在构造方法中创建双向链表集合对象
        minStack = new LinkedList<Integer>();   //利用Deque接口其中的一个实现类
        minStack.push(Integer.MAX_VALUE);    //初始化压入一个int整型最大值,MAX_VALUE
    }
    
    public void push(int x) {
        xStack.push(x);
        minStack.push(Math.min(minStack.peek(), x));  //比较当前值与之前最小值
    }
    
    public void pop() {
        xStack.pop();       //同步弹出栈元素
        minStack.pop();
    }
    
    public int top() {
        return xStack.peek();     //返回元素栈顶元素
    }
    
    public int getMin() {
        return minStack.peek();  //返回辅助栈的元素
    }
}

。
代码补充说明:  

注意哈:

Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。

Deque是一个双端队列接口,继承自Queue接口。

    · Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。

    ·Deque堆栈操作方法:push()、pop()、peek()等。

 


http://www.kler.cn/a/153644.html

相关文章:

  • FAT32文件系统详解
  • 【论文阅读】ActiveNeRF:通过不确定性估计候选新视图
  • 第三节:提供者、消费者、Eureka
  • 天鹅湖国家旅游度假区 | 展柜OLED透明屏:创新展示提升互动体验
  • 聚观早报 |国行PS5轻薄版开售;岚图汽车11月交付7006辆
  • C语言-预处理与库
  • 【Node.js】笔记整理 1 - 基础知识
  • [笔记]dubbo发送接收
  • 【嵌入式Linux程序开发综合实验】-1(附流程图) | ARM开发板 | 测试“Hello World” | Makefile文件 | 实现加法相加
  • 【Go】protobuf介绍及安装
  • Hdoop学习笔记(HDP)-Part.11 安装Kerberos
  • Hdoop学习笔记(HDP)-Part.12 安装HDFS
  • RPA机器人如何解决非银企直联网银账户的数据自动采集?
  • mediapipe+opencv实现保存图像中的人脸,抹去其他信息
  • virtualbox中windows11开机自动登录设置
  • UI自动化Selenium OCR库:ddddocr识别验证码
  • 设计模式_策略模式 更改激光雷达类型
  • 012 OpenCV sobel边缘检测
  • Seaborn可视化图形绘制_Python数据分析与可视化
  • 使用Spark写入数据到数据库表