java算法学习索引之栈和队列(未完)

一  设计一个有getMin功能的栈

实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。

【要求】1.pop、push、getMin操作的时间复杂度都是O(1)。

2.设计的栈类型可以使用现成的栈结构。

public class SpecialStack {private Stack<Integer> dataStack;private Stack<Integer> minStack;public SpecialStack() {dataStack = new Stack<>();minStack = new Stack<>();}public void push(int value) {dataStack.push(value); // 将元素压入数据栈if (minStack.isEmpty() || value <= minStack.peek()) {minStack.push(value); // 如果当前元素小于等于辅助栈栈顶元素,则将当前元素压入辅助栈} else {minStack.push(minStack.peek()); // 如果当前元素大于辅助栈栈顶元素,则将辅助栈的栈顶元素再次压入辅助栈}}public int pop() {if (dataStack.isEmpty()) {throw new RuntimeException("Stack is empty");}minStack.pop(); // 辅助栈同步popreturn dataStack.pop(); // 数据栈pop}public int getMin() {if (minStack.isEmpty()) {throw new RuntimeException("Stack is empty");}return minStack.peek(); // 返回辅助栈的栈顶元素}
}

要实现一个特殊的栈,其中pop、push和getMin操作的时间复杂度都是O(1),我们可以使用两个栈来实现。

具体设计如下:

  1. 使用一个数据栈来存储栈中的元素。

  2. 使用一个辅助栈来存储当前数据栈中的最小元素。

在push操作中,将元素压入数据栈时,比较当前元素与辅助栈的栈顶元素,如果小于等于辅助栈的栈顶元素,则将当前元素也压入辅助栈;如果大于辅助栈的栈顶元素,则将辅助栈的栈顶元素再次压入辅助栈。

在pop操作中,同时对数据栈和辅助栈进行pop操作,以确保两个栈中的元素同步。

getMin操作直接返回辅助栈的栈顶元素即可。

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

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

相关文章

Java实现堆算法

堆是一种特殊的数据结构&#xff0c;它是一棵完全二叉树&#xff0c;且满足堆的性质&#xff1a;对于每个节点&#xff0c;它的值都不小于&#xff08;或不大于&#xff09;它的孩子节点的值。根节点的值就是堆中的最大值&#xff08;或最小值&#xff09;。 Java中提供了一个…

LeetCode:2216. 美化数组的最少删除数(C++)

目录 2216. 美化数组的最少删除数 题目描述&#xff1a; 实现代码与解析&#xff1a; 贪心&#xff1a; 原理思路&#xff1a; 2216. 美化数组的最少删除数 题目描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums &#xff0c;如果满足下述条件&#xff0c;则认为数…

自然语言处理:Transformer与GPT

Transformer和GPT&#xff08;Generative Pre-trained Transformer&#xff09;是深度学习和自然语言处理&#xff08;NLP&#xff09;领域的两个重要概念&#xff0c;它们之间存在密切的关系但也有明显的不同。 1 基本概念 1.1 Transformer基本概念 Transformer是一种深度学…

HarmonyOS基础组件之Button三种类型的使用

简介 HarmonyOS在明年将正式不再兼容Android原生功能&#xff0c;这意味着对于客户端的小伙伴不得不开始学习HarmonyOS开发语言。本篇文章主要介绍鸿蒙中的Button使用。 HarmonyOS中的Button相较于Android原生来说&#xff0c;功能比较丰富&#xff0c;扩展性高&#xff0c;减…

mysql binlog

binlog日志介绍 什么是 binlog binlog是server层共有的&#xff0c;是记录的数据更新历史&#xff0c;主要用来做主从同步和数据的实时备份。 binlog 怎么开启 mysql的配置文件添加相关配置并重启mysql # 1. linux打开mysql配置文件 vi /etc/my.cnf# 2. 添加binlog配置 [mysql…

STC单片机选择外部晶振烧录程序无法切换回内部晶振导致单片机不能使用

STC单片机选择外部晶振烧录程序无法切换回内部晶振导致单片机不能使用 1.概述 在学习51单片机过程中&#xff0c;选择了STC的12C2052AD型号单片机作为入门芯片。前几个课题实验使用默认的内部晶振烧录程序&#xff0c;运行都没有问题。 选择一个LED亮度渐变的课题做实验&…

nvm管理node版本过程记录

写在前面 今天记录一下windows电脑安装nvm同时使用nvm管理node版本的&#xff0c;为什么写windows版本的呢&#xff1f;因为mac版本的基本上是不需要进行记录的&#xff0c;相对windows的安装是简单很多的&#xff0c;行了废话不多说&#xff0c;我们直接开始 安装nvm nvm下载…

redis运维(十二)

一 位图 ① 概念 1、说明&#xff1a;位图还是在操作字符串2、位图玩字符串在内存中存储的二进制3、ASCII字符通过映射转化为二进制4、操作的是字符串value ② ASCII字符铺垫 1、控制ASCII字符 2、ASCII可显示字符 ③ SETBIT 细节&#xff1a; setbit 命令的返回值是之…

C++ 多态和虚函数详解

本文章内容来源于C课堂上的听课笔记 多态基础 多态&#xff08;Polymorphism&#xff09;是面向对象编程中的一个重要概念&#xff0c;它允许使用统一的接口来表示不同的对象和操作。多态性有两种主要形式&#xff1a;静态多态性&#xff08;编译时多态性&#xff09;和动态多…

华为无线ac+fit三层组网,每个ap发射不同的业务vlan

ap管理dhcp在ac控制器上&#xff0c;业务dhcp在汇聚上 配置WLAN业务 &#xff08;1&#xff09;配置VAP模板 • 配置员工网络的VAP模板&#xff08;employee&#xff09; [AC-wlan-view] security-profile name employee //创建名为“employee”的安全模板 [AC-wlan-sec-prof-…

Git面经

Git八股文 第一章 git基础 1.1 什么是git git是一款免费的开源的分布式版本控制系统 1.2 为什么要使用git 为了保留之前的所有版本&#xff0c;方便回滚或修改 1.3 集中化版本控制系统和分布式版本控制系统的区别 集中化版本控制系统如svn&#xff0c;客户端连接到中央服…

C语言——用递归函数计算n!

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 比别人多一点努力&#xff0c;你…

国产化区块链平台-FISCO BCOS 区块链

目录 FISCO BCOS 版本信息 系统概述 关键特性 组件服务 开发运维工具 FISCO BCOS作为一种企业级区块链平台&#xff0c;为企业和组织提供了高性能、隐私保护和可定制的区块链解决方案。其强大的架构和丰富的功能使得企业能够在安全可信的环境中开展区块链应用&#xff0…

基数排序详解(LSD方法+MSD方法+思路+图解+代码)

文章目录 基数排序一、基数排序概念1.LSD排序法&#xff08;最低位优先法&#xff09;2.MSD排序法&#xff08;最高位优先法&#xff09; 基数排序 一、基数排序 概念 基数排序是一种非比较型整数排序算法 将整数按位数切割成不同的数字&#xff0c;然后按每个位数分别比较 …

java中@Async注解的作用?

在Java中&#xff0c;Async注解用于声明一个方法为异步方法。当使用了Async注解的方法被调用时&#xff0c;它将在一个单独的线程中异步执行&#xff0c;不会阻塞当前线程的执行。 使用Async注解的方法通常需要满足以下条件&#xff1a; 必须在使用了EnableAsync注解的配置类…

为什么说Java 中的公平锁(Fair Lock)并不是完全公平的,而是近似公平的

Java 中的公平锁&#xff08;ReentrantLock 的公平模式&#xff09;被称为近似公平是因为在实际执行中&#xff0c;公平锁并不能保证绝对的公平性。这是由于在某些情况下&#xff0c;为了提高性能&#xff0c;Java 的公平锁可能会允许一些非等待的线程插队&#xff0c;而不一定…

Java 多态、抽象类、接口、封装、包

一、Java 多态&#xff1a; 多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口&#xff0c;使用不同的实例而执行不同的操作。多态性是对象多种表现形式的体现。 多态的优点&#xff1a;消除类型之间的耦合关系&#xff1b;可替换性&#xff1b;可扩充性…

小程序开发平台源码系统 各行各业都可使用 功能强大 附带完整的搭建教程

当前&#xff0c;数字化转型已经成为各行各业的重要趋势&#xff0c;而小程序作为数字化转型的重要工具之一&#xff0c;具有广泛的应用前景。因此&#xff0c;我们开发了这个源码系统&#xff0c;以帮助各行各业快速开发出符合需求的小程序。 以下是部分代码示例&#xff1a;…

设计模式—结构型模式之享元模式

设计模式—结构型模式之享元模式 享元模式(Flyweight Pattern)&#xff0c;运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象&#xff0c;而这些对象都很相似&#xff0c;状态变化很小&#xff0c;可以实现对象的多次复用。对象结构型。 在享元模式中可以共…

机器学习实战 ——《跟着迪哥学Python数据分析与机器学习实战》(2)

机器学习实战 ——《跟着迪哥学Python数据分析与机器学习实战》&#xff08;2&#xff09; 七、贝叶斯算法7.1 新闻分类任务实战7.1.1 结巴分词7.1.2 词云表示工具包wordcloud7.1.3 TF-IDF特征 八、聚类算法K-means K-均值聚类算法评估指标优缺点 DBSCAN&#xff08;Density-Ba…