Leetcode面试经典150题-155.最小栈

news2024/11/15 21:22:59

解法都在代码里,不懂就留言或者私信

我写了两种解法,建议选择双栈的,感觉这才是考察点


/**一般解法:过个笔试没问题,建议用双栈的方法 */
class MinStack2 {
    /**至少应该有一个栈用于保存数据 
    对于push和pop以及top的话,如果不考虑从栈中获取最小元素,那就是单纯的栈
    但是因为这个获取最小元素的方法,我们就得准备一个结构用于存放最小值,我这里想到的是最小堆*/
    Stack<Integer> stack;
    PriorityQueue<Integer> heap;
    public MinStack2() {
        stack = new Stack<>();
        heap  = new PriorityQueue<>();
    }
    
    public void push(int val) {
        stack.push(val);
        heap.add(val);
    }
    
    public void pop() {
        Integer pop = stack.pop();
        heap.remove(pop);
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int getMin() {
        return heap.peek();
    }
}

/**最优解法:这大概才是人家的考点*/
class MinStack {
    /**至少应该有一个栈用于保存数据 
    对于push和pop以及top的话,如果不考虑从栈中获取最小元素,那就是单纯的栈
    但是因为这个获取最小元素的方法,我们就得准备一个结构用于存放最小值,我这里想到的是最小堆*/
    /**用于做栈的常规操作的栈 */
    Stack<Integer> stack;
    /**minStack用来保存当前的最小值 */
    Stack<Integer> minStack;
    public MinStack() {
        stack = new Stack<>();
        minStack  = new Stack<>();
    }
    
    public void push(int val) {
        /**stack无论如何是必须要放的*/
        stack.push(val);
        /**用于保存最小值的栈只有影响到最小值的时候才放,因为你加入导致最小值改变了那就让你进最小值
        如果你的出现不影响最小值,那你加入或者删除对于最小值没有任何影响,你进minStack干啥
        这里要特别注意等于的情况,如果等于minStack的栈顶元素是要入minStack,这里避免重复的只入了一个
        然后删除的时候直接删了,但是其实我们有好多个*/
        /**如果minStack是空,那stack肯定也是空的,那val的加入就是最小值 */
        if(minStack.isEmpty() || val <= minStack.peek()) {
            minStack.push(val);
        }
    }
    
    public void pop() {
        if(stack.isEmpty()) {
            return;
        }
        /**无论如何,正常用于操作的栈还是要弹出的 */
        Integer pop = stack.pop();
        /**如果要弹出的刚好是当前最小值,则minStack弹出栈顶
        这里分为两种情况:1 这个值只有一个,那弹出了最小值就变了
        2. 这个值有多个,那弹出之后顶上这个数少一个
        总之弹出的前提是它是当前最小值 */
        /**这个地方注意要用equals,不能用== */
        if(!minStack.isEmpty() && minStack.peek().equals(pop)) {
            minStack.pop();
        }
    }
    /**要的是真实的栈顶值 */
    public int top() {
        return stack.peek();
    }
    /**最小值就是最小值栈的栈顶值 */
    public int getMin() {
        return minStack.peek();
    }
}

/**
 * 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();
 */

运行结果

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

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

相关文章

STM32之SPI读写W25Q128芯片

SPI简介 STM32的SPI是一个串行外设接口。它允许STM32微控制器与其他设备&#xff08;如传感器、存储器等&#xff09;进行高速、全双工、同步的串行通信。通常包含SCLK&#xff08;串行时钟&#xff09;、MOSI&#xff08;主设备输出/从设备输入Master Output Slave Input&…

【React Hooks - useState状态批量更新原理】

概述 所谓批量处理就是当在同时更新多个状态下&#xff0c;能够统一批量处理更新&#xff0c;避免了重复渲染。在React17及之前版本&#xff0c;React只会在合成事件以及生命周期内部进行批量处理&#xff0c;在setTimeout、Promise、Fetch等异步请求中&#xff0c;则不会自动…

【GH】【EXCEL】P1: Write DATA SET from GH into EXCEL

文章目录 WriteFast WriteGH data material :GH process and components instructionFast Write DataFast Write Data & Clear DataFast Write to Cell EXCEL written results Write by ColumnGH data material :Compile ColumnGH process and components instructionWrite…

三、Kafka副本

2、创建2个分区两个副本 /usr/local/kafka/bin# ./kafka-topics.sh --bootstrap-server 192.168.58.130:9092 --create --topic atguigu2 --partitions 2 --replication-factor 23、查看topic详细信息 /usr/local/kafka/bin# ./kafka-topics.sh --bootstrap-server 192.168.5…

如何理解CAPL—Test编程中的测试对象

前言&#xff1a;CAPL—Test编程中的对象&#xff0c;是一个比较复杂的概念&#xff0c;对象的作用是作为Test特定函数的参数。来执行特定的功能&#xff08;这是比较复杂的一个概念&#xff0c;下文会慢慢讲解&#xff09;。 注意&#xff1a;因为翻译的问题&#xff0c;有些…

arm:ADC模数转换器

比较器 AD&#xff1a; 精度&#xff1a;10位 转换速率&#xff1a;500 KSPS 量程&#xff1a;0~3.3v void adc_init(void) {ADCCON (1 << 14) | (49 << 6) | (1 << 1); }unsigned short adc_read(void) {unsigned short value ADCDAT0;while(~(ADCCON &am…

华为M60首次降价,消费回暖能延续?

导语 8月15日&#xff0c;华为Mate 60系列首次官宣降价&#xff01;能否带动消费电子进一步回暖&#xff1f; 在当前全球经济形势复杂多变的背景下&#xff0c;各行各业都在寻求新的增长点和突破口。 消费电子市场作为科技与日常生活紧密结合的重要领域&#xff0c;其发展态势一…

基于HarmonyOS的宠物收养系统的设计与实现(一)

基于HarmonyOS的宠物收养系统的设计与实现&#xff08;一&#xff09; 本系统是简易的宠物收养系统&#xff0c;为了更加熟练地掌握HarmonyOS相关技术的使用。 项目创建 创建一个空项目取名为PetApp 首页实现&#xff08;组件导航使用&#xff09; 官方文档&#xff1a;组…

微服务中的Sidecar模式

微服务中的Sidecar模式 什么是sidecarsidecar如何工作Sidecar 代理服务注册发现Sidecar 代理异构服务发起服务调用异构服务如何被调用 常见应用以MOSN流量接管为例使用 sidecar 模式的优势sidecar和面向切片编程AOP的关系参考 什么是sidecar sidecar是服务网络架构的产物。 S…

【网络】 arp 命令 得到网段内所有物理设备ip

我的笔记本和 NVIDIA Jetson Orin 都位于同一个 192.168.1.x 的网段内&#xff0c;我想远程访问 Orin&#xff0c;但我不知道orin的ip 方法 1: 使用 arp 命令 打开命令提示符&#xff1a; 按下 Win R 键&#xff0c;打开“运行”对话框。输入 cmd 并按 Enter 键打开命令提示符…

JAVA类加载过程/类装载的执行过程/java类加载机制/JVM加载Class文件的原理机制?

JAVA类加载过程/类装载的执行过程/java类加载机制/JVM加载Class文件的原理机制&#xff1f; 类加载的过程主要分为三个部分&#xff1a;&#xff08;加链初&#xff0c;验准解&#xff09; 加载链接初始化 而链接又可以细分为三个小部分&#xff1a; 验证准备解析 骚戴理解…

散点图适用于什么数据 thinkcell散点图设置不同颜色

在数据可视化的众多工具和技巧中&#xff0c;散点图是一种极为有效的方式&#xff0c;能够揭示变量之间的关系&#xff0c;尤其是在探索数据集的相关性、分布趋势、集群现象时。而在众多助力于制作高质量散点图的工具中&#xff0c;think-cell插件以其高效的操作和丰富的功能&a…

重定向与追加

1、>和>> > 【重定向】 如果文件不存在&#xff0c;则创建&#xff0c;并将内容输入到文件&#xff1b; 如果文件存在&#xff0c;则先清空文件&#xff0c;然后将内容输入到文件&#xff1b;>> 【追加】 如果文件不存在&#xff0c;则创建&…

自监督学习self-supervised learning

Tags: #tutorial #machine-leanring #self-supervised 目录&#xff1a; The Importance of Self-Supervised Learning Popular Learning Methods Introduction to Self-Supervised Learning 1. The Inportance of Self-Supervised Learning 监督学习(supervised learnin…

【面试】tomcat类加载机制

目录 1. 说明2. 主要类加载器2.1 Bootstrap类加载器2.2 Common类加载器2.3 Catalina类加载器2.4 Shared类加载器2.5 Web应用类加载器2.5 JSP类加载器 3. 图示4. 特点5. 加载顺序6. 面试题 1. 说明 1.tomcat的类加载机制是违反了双亲委派原则的&#xff0c;对于一些未加载的非基…

初识指针3の学习笔记

目录 1>>前言 2>>冒泡排序 3>>二级指针 4>>指针数组 5>>指针数组模拟二维数组 6>>结语 1>>前言 今天我会继续分享一些我做的笔记&#xff0c;以及我对指针的理解&#xff0c; 后续会持续分享指针几天&#xff0c;毕竟指针的内…

实验室安全分级分类管理系统在高校中的具体应用

盛元广通高校实验室安全分级分类管理系统的构建&#xff0c;旨在通过科学合理的管理手段&#xff0c;提高实验室的安全水平&#xff0c;保障师生的人身安全&#xff0c;防止实验事故的发生。这一系统通常包括实验室安全等级评估、分类管理、风险控制、安全教育与培训、应急响应…

[Qt][绘图][上]详细讲解

目录 0.为什么&#xff1f;1.绘图API核心类2.设置画笔3.设置画刷4.设置画家1.移动画家位置2.保存/加载画家的状态 0.为什么&#xff1f; 虽然Qt已经内置了很多的控件&#xff0c;但是不能保证现有控件就可以应对所有场景&#xff0c;很多时候&#xff0c;需要更强的"定制…

第N8周:使用Word2vec实现文本分类

本文为365天深度学习训练营 中的学习记录博客原作者&#xff1a;K同学啊 一、数据预处理 任务说明: 本次将加入Word2vec使用PyTorch实现中文文本分类&#xff0c;Word2Vec 则是其中的一种词嵌入方法&#xff0c;是一种用于生成词向量的浅层神经网络模型&#xff0c;由Tomas M…

spring boot学习第二十篇:使用minio上传下载文件获取文件路径

先安装好minio&#xff0c;参考&#xff1a;window10安装minio-CSDN博客 1、pom.xml文件添加依赖&#xff1a; <!-- 操作minio的java客户端--><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.…