《算法通关村—最大小栈问题解析》

news2024/12/28 21:58:57

《算法通关村—最大小栈问题解析》

最小栈

描述

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

实现最小栈

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

怎么才能在常数时间内拿到最小元素,我们通过设计两个栈,一个栈存储元素,一个栈存储最小元素(这个存储的是当前元素加入进来的时候,整个栈中最小的元素,比如说)

# 储存元素的栈为stack,最小元素的栈为minStack 
push(5);
stack -> [5];
minStack -> [5];
push(6) ;
stack -> [5,6];
minStack -> [5,5]; # 这里如果插入的时候就跟当前最小栈中的元素比较,如果更小就插入,如果没有更小就插入原来最小的。

通过有这样两个栈,对原来元素的栈进行操作的时候,同时对最小栈进行操作,这样就能保证在常数时间内获得栈内最小元素了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实现代码

package AlgorithmForth;

import java.util.Deque;
import java.util.LinkedList;

/**
 * 最小栈
 */
public class MinStack {
    Deque<Integer> xStack;
    Deque<Integer> minStack;

    public MinStack() {
        xStack = new LinkedList<>();
        minStack = new LinkedList<>();
        minStack.push(Integer.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();
    }

    public static void main(String[] args) {
        MinStack minStack1  = new MinStack();
        minStack1.push(1);
        minStack1.push(8);
        minStack1.push(2);
        minStack1.push(12);
        minStack1.push(8);
        System.out.println(minStack1.getMin());
    }
}

最大栈

LeetCode 716.设计一个最大栈数据结构,既支持栈操作,又支持查找栈中最大元素

实现MaxStack

MaxStack() 初始化栈对象 
void push(int x) 将元素 x 压入栈中。 
int pop() 移除栈顶元素并返回这个元素。 
int top() 返回栈顶元素,无需移除。 
int peekMax() 检索并返回栈中最大元素,无需移除。 
int popMax() 检索并返回栈中最大元素,并将其移除。 如果有多个最大元素,只要移除 最靠近栈顶 的那个。

最大栈的实现其实和最小栈是差不多的,都是通过两个栈来实现常数查找到最大。

直接上代码

package AlgorithmForth;

import java.util.Stack;

/**
 * 最大栈
 */
public class MaxStack {
    Stack<Integer> stack;
    Stack<Integer> maxStack;

    public MaxStack() {
        stack = new Stack<>();
        maxStack = new Stack<>();
    }

    public void push(int x) {
        int max = maxStack.isEmpty() ? x : maxStack.peek();
        maxStack.push(max > x ? max : x);
        stack.push(x);
    }

    public int pop() {
        maxStack.pop();
        return stack.pop();
    }

    public int top() {
        return stack.peek();
    }

    public int peekMax() {
        return maxStack.peek();
    }

    public int popMax() {
        int max = peekMax();
        Stack<Integer> buffer = new Stack<>();
        while (top() != max) buffer.push(pop());
        pop();
        while (!buffer.isEmpty()) push(buffer.pop());
        return max;
    }

    public static void main(String[] args) {
        MaxStack maxStack1 = new MaxStack();
        maxStack1.push(1);
        maxStack1.push(8);
        maxStack1.push(2);
        maxStack1.push(12);
        maxStack1.push(8);
        System.out.println(maxStack1.peekMax());
    }
}

近期在自学 Java 做项目,加入了一个编程学习圈子,里面有编程学习路线和原创的项目教程,感觉非常不错。还可以 1 对 1 和大厂嘉宾交流答疑,也希望能对大家有帮助,扫 ⬇️ 二维码即可加入。

在这里插入图片描述

也可以点击链接:我正在「编程导航」和朋友们讨论有趣的话题,你⼀起来吧?

也可以加我QQ(2837468248)咨询说明来意!

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

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

相关文章

计算线阵相机 到 拍摄产品之间 摆放距离?(隐含条件:保证图像不变形)

一物体被放置在传送带上&#xff0c;转轴的直径为100mm。已知线阵相机4K7u&#xff08;一行共4096个像素单元&#xff0c;像素单元大小7um&#xff09;&#xff0c;镜头35mm&#xff0c;编码器2000脉冲/圈。保证图像不变形的条件下&#xff0c;计算相机到产品之间 摆放距离&…

Docker的架构与自制镜像的发布

一. Docker 是什么 Docker与自动化测试及其测试实践 大家都知道虚拟机吧&#xff0c;windows 上装个 linux 虚拟机是大部分程序员的常用方案。公司生产环境大多也是虚拟机&#xff0c;虚拟机将物理硬件资源虚拟化&#xff0c;按需分配和使用&#xff0c;虚拟机使用起来和真实操…

[计算机提升] Windows系统各种开机启动方式介绍

1.14 开机启动 在Windows系统中&#xff0c;开机启动是指开启电脑后&#xff0c;自动运行指定的程序或服务的技术。一些程序或服务需要在开机后自动启动&#xff0c;以便及时响应用户操作&#xff0c;比如防安防软件、即时通信工具、文件同步软件等。 同时&#xff0c;一些系统…

5.OsgEarth加载地形

愿你出走半生,归来仍是少年&#xff01; 在三维场景中除了使用影像体现出地貌情况&#xff0c;还需要通过地形体现出地势起伏&#xff0c;还原一个相对真实的三维虚拟世界。 osgEarth可通过直接加载Dem数据进行场景内的地形构建。 1.数据准备 由于我也没有高程数据&#xff0c…

在Centos7中配置NIS的详细过程

在Centos7中配置NIS的详细过程 原理 NIS(Network Information Service) 在有多台linux服务器的环境中&#xff0c;且一台linux服务器的账号又有很多且可能会相同&#xff0c;所以会出现理员很难管理的现象。NIS的主要功能是对主机账号系统等系统信息提供集中的管理。 当NIS客户…

C# 图解教程 第5版 —— 第10章 语句

文章目录 10.1 什么是语句&#xff08;*&#xff09;10.2 表达式语句10.3 控制流语句10.4 if 语句&#xff08;*&#xff09;10.5 if ... else 语句&#xff08;*&#xff09;10.6 while 循环&#xff08;*&#xff09;10.7 do 循环&#xff08;*&#xff09;10.8 for 循环10.8…

centos7虚拟机部署苍穹私有云环境记录

物理机建议16G内存以上&#xff0c;不然安装gpass过程中带不动虚拟机 步骤1&#xff1a;迅雷下载centos7.9镜像文件&#xff0c;并创建虚拟机&#xff0c;手动安装 http://ftp.sjtu.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso 后面安装gpass时会有校验…

一文1800字解读性能指标与性能分析

性能测试监控关键指标: 1、系统指标:与⽤户场景与需求直接相关的指标 2、服务器资源指标:硬件服务器的资源使⽤情况的指标 3、JAVA应⽤ : JAVA应⽤程序在运⾏时的各项指标 4、数据库:数据库服务器运⾏时需要监控的指标 5、压测机资源指标:测试机在模拟⽤户负载时的资源使⽤…

经典目标检测神经网络 - RCNN、SSD、YOLO

文章目录 1. 目标检测算法分类2. 区域卷积神经网络2.1 R-CNN2.2 Fast R-CNN2.3 Faster R-CNN2.4 Mask R-CNN2.5 速度和精度比较 3. 单发多框检测&#xff08;SSD&#xff09;4. YOLO 1. 目标检测算法分类 目标检测算法主要分两类&#xff1a;One-Stage与Two-Stage。One-Stage与…

python3+requests+unittest实战详解(一)

1、环境准备 python3 pycharm编辑器 2、框架目录展示 &#xff08;该套代码只是简单入门&#xff0c;有兴趣的可以不断后期完善&#xff09; &#xff08;1&#xff09;run.py主运行文件&#xff0c;运行之后可以生成相应的测试报告&#xff0c;并以邮件形式发送&#xff1…

如何写好测试用例,看完即会

目的 测试用例这个名词&#xff0c;相信各位从业者已经是熟悉的不能再熟悉了&#xff0c;无论你是从事何种行业&#xff0c;只要是软件测试从业者&#xff0c;测试用例始终贯穿于我们的日常工作中&#xff0c;今天我们就针对设计测试用例的方方面面进行一个详细的介绍。 写好黑…

【华为HCIP | 职业认证考试】821每日一刷

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️ 零…

STM32 ADC数模转换器

STM32 ADC数模转换器 ADC简介 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 STM32主要是数字电路&#xff0c;数字电路只有高低电平&#xf…

计算机网络重点概念整理-第四章 网络层【期末复习|考研复习】

第四章 网络层 【期末复习|考研复习】 计算机网络系列文章传送门&#xff1a; 第一章 计算机网络概述 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第七章 网络安全 计算机网络整理-简称&缩写 文章目录 第四章 网络层 【期末复习|考研复习…

云计算与ai人工智能对高防cdn的发展

高防CDN&#xff08;Content Delivery Network&#xff09;作为网络安全领域的一项关键技术&#xff0c;致力于保护在线内容免受各种网络攻击&#xff0c;包括分布式拒绝服务攻击&#xff08;DDoS&#xff09;等。然而&#xff0c;随着人工智能&#xff08;AI&#xff09;和大数…

AOSP 编译真机镜像与AVD镜像

硬件设备当然是配置越高越好&#xff0c;虚拟机编译至少需要16G内存300G硬盘空间 配置环境 Ubuntu 最好&#xff0c;安装方式网上一大堆&#xff0c;自行搜索&#xff0c;本文是基于 Ubuntu 22.04.3 LTS 更新&&配置 sudo apt-get update sudo apt-get upgrade sudo ap…

云服务器搭建Zookeeper集群

文章目录 1.集群配置2.zookeeper的群起脚本3. Zookeeper节点的创建和删除相关4. Zookeeper的选举机制 1.集群配置 Zookeeper的集群个数最好保证是奇数个数&#xff0c;因为Zookeeper的选举过程有一个“半数机制”。 5台服务器&#xff0c;可以设置Zookeeper的集群为3或者5&…

世界前沿技术发展报告2023《世界航空技术发展报告》(二)军用飞机技术

&#xff08;二&#xff09;军用飞机技术 1.作战飞机1.1 美俄对第五代战斗机进行升级改进1.2 美欧第六代战斗机技术取得新进展1.3 美国B-21隐身轰炸机正式亮相 2.支援飞机2.1 美国空军拟研制翼身融合布局运输/加油机2.2 美欧厂商积极参加北约未来预警机技术研究项目2.3 美国空军…

FPGA时序分析与约束(7)——通过Tcl扩展SDC

一、概述 术语“Synopsys公司设计约束”&#xff08;又名SDC&#xff0c;Synopsys Design Constraints&#xff09;用于描述对时序、功率和面积的设计要求&#xff0c;是EDA工具中用于综合、STA和布局布线最常用的格式。本文介绍时序约束的历史概要和SDC的描述。 二、时序约束…

【计算机网络】TCP协议

文章目录 1. TCP报文的结构2. TCP的发送缓冲区和接收缓冲区3. 确保可靠性序列号和确认序列号确认应答超时重传连接管理1️⃣三次握手建立连接2️⃣四次挥手断开连接 4. 提高性能流量控制滑动窗口拥塞控制延迟应答捎带应答 5. 面向字节流6. TCP/UDP对比 概念&#xff1a;TCP&…