leetcode 155. 最小栈

news2024/9/20 21:43:40

2023.10.31

        本题关键在于要求在能在常数时间内检索出最小元素。  其他四个方法都可以用普通的栈进行实现,最后一个方法“获取堆栈中最小元素” 可以借助一个新栈,专门用于存储栈中最小值的。具体细节看java代码:

class MinStack {
    private Deque<Integer> stack;
    private Deque<Integer> minStack;

    public MinStack() {
        stack = new LinkedList<>();
        minStack = new LinkedList<>();
        minStack.addFirst(Integer.MAX_VALUE);
    }
    
    public void push(int val) {
        stack.addFirst(val);
        minStack.addFirst(Math.min(minStack.getFirst(),val));
    }
    
    public void pop() {
        stack.removeFirst();
        minStack.removeFirst();
    }
    
    public int top() {
        return stack.getFirst();
    }
    
    public int getMin() {
        return minStack.getFirst();
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(val);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

        借助本题顺便复习了一下java中的栈。

        在Java中,一般使用Deque而不使用Stack,因为Stack是实现的Vector接口,而Vector接口是Java中写的不太好的一个接口,为了保证线程安全,很多方法都用了synchronized修饰导致效率较低。相比较之下,像ArrayDeque,LinkedList这些线程不安全的,只需要在需要线程安全的时候用Collections.synchronizedCollection()转化成线程安全的就行了,效率会高一些。

        其次,Stack只能上进上出,只能用于模拟栈,而Deque能上进上出,下进下出,既可以模拟栈又可以模拟队列,所以使用较为方便。

        Deque的两个实现类:

  • ArrayDeque:是数组结构,插入元素不能为null,无法确定数据量时,后期扩容会影响效率
  • LinkList:链表结构,插入元素可以为null,无法确定数据量时,表现较好

Deque中常用方法:

  • addFirst() - 在双端队列的开头添加指定的元素。如果双端队列已满,则引发异常。

  • addLast() - 在双端队列的末尾添加指定的元素。如果双端队列已满,则引发异常。

  • offerFirst() - 在双端队列的开头添加指定的元素。如果双端队列已满,则返回false。

  • offerLast() - 在双端队列的末尾添加指定的元素。如果双端队列已满,则返回false。

  • getFirst() - 返回双端队列的第一个元素。如果双端队列为空,则引发异常。

  • getLast() - 返回双端队列的最后一个元素。如果双端队列为空,则引发异常。

  • peekFirst() - 返回双端队列的第一个元素。如果双端队列为空,则返回null。

  • peekLast() - 返回双端队列的最后一个元素。如果双端队列为空,则返回null。

  • removeFirst() - 返回并删除双端队列的第一个元素。如果双端队列为空,则引发异常。

  • removeLast() - 返回并删除双端队列的最后一个元素。如果双端队列为空,则引发异常。

  • pollFirst() - 返回并删除双端队列的第一个元素。如果双端队列为空,则返回null。

  • pollLast() - 返回并删除双端队列的最后一个元素。如果双端队列为空,则返回null。

        方法主要就是在头部尾部:增、删、查。 一共6种,每种又根据返回值的不同又分两种,总共12个方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1153577.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity 粒子特效-第三集-星星闪烁特效

一、特效预览 二、制作原理 星星素材资源 链接&#xff1a;https://pan.baidu.com/s/17D-9sC-ErtqmUxl81Ln1Mw?pwdndm9 提取码&#xff1a;ndm9 1.素材介绍 仔细看&#xff0c;我们的粒子贴图是&#xff08;如下&#xff09;&#xff0c;一颗星星 2.步骤介绍 1.星星动画的…

ROCKCHIP ~ Camera 闪光灯

一、闪光灯基本原理 工作模式 Camera flash led分flash和torch两种模式。 flash&#xff1a; 拍照时上光灯瞬间亮一下&#xff0c;电流比较大&#xff0c;目前是1000mA&#xff0c;最大电流不能超过led最大承受能力 torch&#xff1a; 只用于录video或者拿led当手电筒的情况&…

配音软件的重要性?我不说你也能猜到

随着时代的发展&#xff0c;短视频已经渗透到我们生活中的各个场景。想尝试做自媒体的小伙伴们&#xff0c;一定要试试配音软件&#xff0c;绝对能帮助你达到事半功倍的效果&#xff0c;通过一段时间的使用和比较&#xff0c;我摸索出4个简单又好用的配音软件&#xff0c;接下来…

c语言基础:L1-066 猫是液体

测量一个人的体积是很难的&#xff0c;但猫就不一样了。因为猫是液体&#xff0c;所以可以很容易地通过测量一个长方体容器的容积来得到容器里猫的体积。本题就请你完成这个计算。 输入格式&#xff1a; 输入在第一行中给出 3 个不超过 100 的正整数&#xff0c;分别对应容器…

el-table动态增加列、行数据,俩种方法实现按需选择

需求&#xff1a; 表格数据过多的时候&#xff0c;需要实现动态选择数据的功能&#xff0c;有俩种方法可以按需选择&#xff0c;解决了表格动态选择时闪屏数据抖动问题。 注意&#xff0c;这个添加数据是tableData原本就有的&#xff0c;我做的这个操作类似就是折叠选择展示原有…

分享一下怎么做一个商城小程序

如何制作一个商城小程序&#xff1a;功能解析、设计思路与实现方法 一、引言 随着移动设备的普及和微信小程序的兴起&#xff0c;越来越多的消费者选择在商城小程序上进行购物。商城小程序具有便捷、高效、即用即走等特点&#xff0c;为企业提供了新的销售渠道和推广方式。本…

Rust-虽然9天过去了,结果是没有结果(Docker容器的端口映射问题)

​ 这篇文章收录于Rust 实战专栏。这个专栏中的相关代码来自于我开发的笔记系统。它启动于是2023年的9月14日。相关技术栈目前包括&#xff1a;Rust&#xff0c;Javascript。关注我&#xff0c;我会通过这个项目的开发给大家带来相关实战技术的分享。 前言 上上周了吧&#xf…

非母语玩家如何撰写英文研究性论文:2 Methodology

参考书——《Science Research Writing for non-native Speakers of English》 文章目录 1 Structure 结构2 语法和写作技巧2.1 Passives and Tense Pairs: 被动语态以及时态对2.2 a与the的使用方法2.3 Adverbs and adverb location: 副词及其位置 3 Build a Model——构建Meth…

【每日一题】每棵子树内缺失的最小基因值

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;DFS 写在最后 Tag 【dfs】【树】【2023-10-31】 题目来源 2003. 每棵子树内缺失的最小基因值 题目解读 找出每棵子树内缺失的最小基因值。 解题思路 方法一&#xff1a;DFS 找到基因值为 1 的节点&#xff0c;从该…

大中小企业对CRM系统的需求

在以前&#xff0c;CRM客户管理系统是大型企业的专属。如今&#xff0c;不论何种规模的企业都能够使用CRM系统。市面上的CRM有着丰富的功能类型&#xff0c;管理者可以从企业自身规模出发&#xff0c;选择适合的CRM系统。下面说说&#xff0c;大中小企业对CRM系统的需求。 一句…

Linux各个发行版之间的关系

Linux各个发行版之间的关系 可以查看链接&#xff1a;Linux Timeline 链接中可以下载PNG或者SVG图片

Redis Cluster (Redis 集群),使用Redis自带的集群功能搭建无主模式集群

文章目录 一、概述二、模拟配置说明三、脚本方式创建 Redis Cluster3.1 配置创建脚本3.2 启动集群实例3.3 创建集群3.4 测试集群3.5 停止集群实例3.6 删除&#xff08;清空&#xff09;集群 四、手动创建集群 Redis Cluster4.1 启动集群实例4.2 手动创建集群4.4 测试集群 五、集…

Studio One6最新版本保姆级下载安装教程

根据使用者情况表明Vocoder一个与众不同的创意游乐场&#xff0c;它能够将两个输入信号组合在一起&#xff0c;创建由一系列带通滤波器处理的最新声音&#xff0c;将您的声音或任何音频源转换为独特的合成器或效果器&#xff0c;声码器将激发您玩转音频的无限创意。值得肯定的是…

【Python 常用脚本及命令系列 9 -- 图片文字识别 EasyOCR使用】

文章目录 1.1 EasyOCR 介绍1.1.1 EasyOCR 安装1.1.2 EasyOCR 使用方法1.1.2.1 EasyOCR 支持的语言种类1.1.2.2 EasyOCR 支持的图像格式 EasyOCR 提高图片文字识别正确率1.3 问题总结 1.1 EasyOCR 介绍 Python中有一个不错的OCR库-EasyOCR&#xff0c;在GitHub已有9700 star。它…

对话式AI驱动的计算机辅助设计【CAD】

大型语言模型 (LLM) 为 CAD 软件公司提供了通过对话式 AI 增强设计工作流程的新机会。 工程师无需浏览复杂的菜单&#xff0c;而是可以用简单的语言描述需求并接收由集成数据支持的智能响应。 例如&#xff0c;工程师可以通过询问“2 盎司以下的铝支架”来查询零件数据库。 LL…

荣获IoT最具潜力企业奖,美格智能引领AIoT应用变革

10月30日&#xff0c;2023第十届IoT大会在深圳盛大开幕。大会同期举办第八届IoT创新奖评选&#xff0c;美格智能顺利通过层层遴选&#xff0c;获颁“IoT最具潜力企业奖”。这一荣誉不仅是对公司目前研发水平、产品服务、业务发展及综合实力的高度认可&#xff0c;更是对创新能力…

基于SSM的高校疫情防控出入信息管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

2023年上海市初中生“爱我中华”主题征文的详细框架(续)

“中文自修杯”2023年上海市初中生“爱我中华”主题征文活动自由报名最后提交时间为今天&#xff08;10月31日&#xff09;&#xff0c;请记得及时提交文稿。 前一篇文章&#xff0c;六分成长介绍了大家在提交征文时候的三个困惑以及解决方法。这篇文章继续为大家列出后面三个主…

springboot+vue基于Hadoop短视频流量数据分析与可视化系统的设计与实现【内含源码+文档+部署教程】

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…