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

BM43-包含min函数的栈

题目

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。

此栈包含的方法有:

  • push(value):将value压入栈中
  • pop():弹出栈顶元素
  • top():获取栈顶元素
  • min():获取栈中最小元素

数据范围:操作数量满足 0≤n≤300,输入的元素满足 ∣val∣≤10000。
进阶:栈的各个操作的时间复杂度是 O(1),空间复杂度是 O(n)。

示例:

输入:    ["PSH-1","PSH2","MIN","TOP","POP","PSH1","TOP","MIN"]

输出:    -1,2,1,-1

解析:

  • "PSH-1"表示将-1压入栈中,栈中元素为-1
  • "PSH2"表示将2压入栈中,栈中元素为2,-1
  • “MIN”表示获取此时栈中最小元素==>返回-1
  • "TOP"表示获取栈顶元素==>返回2
  • "POP"表示弹出栈顶元素,弹出2,栈中元素为-1
  • "PSH1"表示将1压入栈中,栈中元素为1,-1
  • "TOP"表示获取栈顶元素==>返回1
  • “MIN”表示获取此时栈中最小元素==>返回-1

示例1

输入:["PSH-1","PSH2","MIN","TOP","POP","PSH1","TOP","MIN"]

返回值:-1,2,1,-1


思路:双栈实现

  • element栈:具体存储元素。
  • support栈:辅助栈,比较当前元素和此栈栈顶元素的值,取最小值放入此栈中,它就一直维护当前栈的最小值。

代码

import java.util.Stack;public class Solution { //具体存储元素private Stack<Integer> element = new Stack<>();//辅助栈,一直保存最小元素private Stack<Integer> support = new Stack<>();;public void push(int node) {element.push(node);if(support.isEmpty()) {support.push(node);} else {int tmpMin = support.peek();//比较当前元素和tmpMin谁更小,将最小元素push进辅助栈中int min = Math.min(node, tmpMin);support.push(min);}}public void pop() {element.pop();support.pop();}public int top() {return element.peek();}public int min() {return support.peek();}
}

http://www.lryc.cn/news/63234.html

相关文章:

  • [学习笔记] [机器学习] 3. KNN( K-近邻算法)及练习案例
  • React Hooks 钩子函数错误用法,你还在犯这些错误吗
  • tpm2-tools源码分析之tpm2_evictcontrol.c(1)
  • SpringCloud_OpenFeign服务调用和Resilience4J断路器
  • 【C++】switch 语句
  • 【Database-06】Centos 9 安装docker版的Oceanbase
  • TiDB Operator 和 Operator Dashboard
  • 计算机网络闲谈01——QUIC协议
  • 楼层滚动效果(超级简单,易懂)
  • FPGA、 CPU、GPU、ASIC区别
  • ChatGPT 之父承认 GPT-5 并不存在,为什么 OpenAI 总是这么实诚?|万字详述
  • 华为交换机配置telnet登录图文教程
  • Linux:网络基础1
  • Matlab对日期变量和时间变量的管理
  • js字符串 常用方法 并带详细讲解
  • Oracle_Audit_审计
  • python算法中的深度学习算法之生成对抗网络(详解)
  • 【VM服务管家】VM4.0软件使用_1.2 工具类
  • Android系统架构
  • 零基础想成为黑客,只需要四步
  • ChatGPT研究报告:AIGC带来新一轮范式转移
  • 自助式数据分析平台:jvs数据智仓-统计报表的使用条件及界面介绍
  • php连接sqlserver
  • Android 9.0 原生SystemUI下拉通知栏UI背景设置为圆角背景的定制(一)
  • vCenter(PSC)正常更改或重置administrator@vsphere.local用户的密码方法
  • 【五一创作】Java 反射
  • 常见元件、封装、尺寸、表面处理等
  • 作为一名8年测试工程师,因为偷偷接私活被····
  • 前端面试八股文
  • [创新工具和方法论]-02- DOE实验设计步骤