java 实现一个最小栈
创始人
2024-01-26 05:13:23

文章目录

  • 最小栈
    • 1.实现思路
    • 2.实现过程演示
    • 3.代码实现思路
      • 3.1 压入思路
      • 3.2 弹出思路
      • 3.3 如何返回栈顶元素的下标
      • 3.4 如何返回栈的最小值
    • 4.整体代码实现

最小栈

1.实现思路

  • 实现一个stack栈 和 minStack栈。
  • 先将数据一个一个压入到 stack 中。
  • 找到 stack 中的最小值。
  • minStack中始终要压入当前最小的值。

2.实现过程演示

1、先将元素压入到 stack 中,若当前的 minStack 中没有元素。则当前的元素为最小值。



2、将最小压入到 minStack 中。



3、压入3和0这两个数据,0成为了当前的最小值。



4、将当前最小值0压入到 minStack 中



5、继续压入9,当前的最小值还是0。



6、此时压入 -9 ,-9为此时最小值,将它压入minStack中



7、如果此时压入到stack中的值等于当前最小的值,也要压入到minStack中
在这里插入图片描述


总结:

如果要存放的值为x,minStack的栈顶元素为y。

  • x < y 时,要压入元素到minStack中。
  • x == y 时,要压入元素到minStack中。
  • x > y 时,不需要压入,

3.代码实现思路

3.1 压入思路

  1. 先实现两个栈,一个是普通栈,一个是最小栈。
 stack = new Stack<>();minStack = new Stack<>();
  1. 往stack中压入一个元素。
 stack.push(val);
  1. 若此时minStack为空,就将 stack 中元素压入到minStack中。
 if (minStack.empty()) {minStack.push(val);}
  1. 若不为空就比较一下,将当前最小值压入到minStack中。
int stackTop = stack.peek();
if (val <= stackTop) {minStack.push(val);
}

3.2 弹出思路

  1. stack不能是空的,若是空的就不能弹出。
 if (!stack.empty()) {}
  1. 若当前stack不为空,弹出stack栈顶元素,定义一个变量接收。
 int stackX = stack.pop();
  1. 如果stack栈顶的值等于minStack的栈顶的值就弹出minStack栈栈顶的元素
if (stackX == minStack.peek()) {minStack.pop();
}

3.3 如何返回栈顶元素的下标

  1. 前提是栈不为空 - 直接用peek返回
if (!stack.empty()) {return stack.peek();
}
  1. 若栈是空的,直接返回-1表示栈为空。
return -1;

3.4 如何返回栈的最小值

  1. 因为此时栈顶会一直是最小值,所以直接返回栈顶元素即可
 return minStack.peek();
  1. 前提是栈不为空,若此时栈为空,就直接返回-1表示此时栈为空。
return -1;

4.整体代码实现

public class MinStack {private Stack stack;private Stack minStack;public void minStack() {stack = new Stack<>();minStack = new Stack<>();}public void push(int val) {stack.push(val);//给stack压入一个值//最小栈为空if (minStack.empty()) {minStack.push(val);//压入到最小栈}else {//比较大小int stackTop = stack.peek();//看一下栈顶元素的值if (val <= stackTop) {//将这个栈顶元素压入到minStack中minStack.push(val);}}}public void pop() {if (!stack.empty()) {int stackX = stack.pop();//压入到stackX中//如果stack的栈顶的值等于最小栈的栈顶的值if (stackX == minStack.peek()) {//弹出minStack.pop();}}}public int top() {//不为空if (!stack.empty()) {//返回栈顶位置的下标return stack.peek();}return -1;}public int getMin() {if (minStack.empty()) {return -1;}//不为空返回栈顶的下标 - 栈顶会一直放最小值return minStack.peek();}
}

上一篇:关于Rem的句子

下一篇:想念天堂的奶奶

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
插入行快捷键 excel添加空... 如下图所示,像这样在两行之间插入多行空白行的操作,你会几种?可能很多人都会觉得,不就是插入空行嘛,简...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
疑难件什么意思 淘宝退货为什么... 01 常见售后类型对于现在主流电商来说,通常支持的售后形式包括仅退款,退货退款,换货,补寄。用户根据...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...