写点什么

Java 实现有 getMin 功能的栈

作者:秋名山码民
  • 2022 年 7 月 15 日
  • 本文字数:1423 字

    阅读完需:约 5 分钟

题目:实现栈的基本功能的情况下,再实现返回最小元素的操作


思路 1:开辟额外空间栈,一个用来本来栈的元素,另外一个用来标记最小元素,压入栈 2 始终压入当前最小值。栈顶元素始终为最小值


思路 2:与 1 不同的是,压入栈 2 如果不是最小值不执行操作,故对比 1 来说,2 稍微节省栈的空间,但是在弹出的时候会稍费时间


思路 1 实现:

package 栈和队列.getMin功能的栈;
import java.util.Stack;
public class One { public class MyStack2 { private Stack<Integer> stackData; private Stack<Integer> stackMin;
public MyStack2(){ //有参构造 this.stackData = new Stack<Integer>(); this.stackMin = new Stack<Integer>(); }
public void push(int newNum){ if(this.stackMin.isEmpty()){ this.stackMin.push(newNum); }else if(newNum<this.getmin()){ this.stackMin.push(newNum); }else{ int newMin = this.stackMin.peek(); this.stackMin.push(newMin); } this.stackData.push(newNum); }
public int pop(){ if(this.stackData.isEmpty()){ throw new RuntimeException("Your stack is Empty."); } this.stackMin.pop(); return this.stackData.pop(); }
public int getmin(){ if(this.stackMin.empty()){ throw new RuntimeException("Your stack is Empty."); } return this.stackMin.peek(); } }}

复制代码

方法 2 实现:

package 栈和队列.getMin功能的栈;
import java.util.Stack;
public class Two { //newNum,压入stackData中,判断stackMin栈顶元素比较,更小或者相等,则newNum也压入stackMin中 //当一样或大于时,stackMin栈不执行操作 public static void main(String[] args) {
}
public class MyStack1 { private Stack<Integer> stackData; private Stack<Integer> stackMin;
public MyStack1() { this.stackData = new Stack<Integer>(); this.stackMin = new Stack<Integer>(); }
public void push(int newNum) { if (this.stackMin.isEmpty()) { this.stackMin.push(newNum); } else if (newNum <= this.getmin()) { this.stackMin.push(newNum); } this.stackData.push(newNum); }
public int pop() { if (this.stackData.isEmpty()) { throw new RuntimeException("Your stack is empty."); } int value = this.stackData.pop(); if (value == this.getmin()) { this.stackMin.pop(); } return value; }
public int getmin() { if (this.stackMin.isEmpty()) { throw new RuntimeException("Your stack is Empty."); } return this.stackMin.peek(); } }}
复制代码


发布于: 刚刚阅读数: 3
用户头像

卷不死,就往…… 2021.10.19 加入

2019NOIP退役成员,华为云享专家,阿里云专家博主,csdn博主,努力进行算法分享,有问题欢迎私聊

评论

发布
暂无评论
Java实现有getMin功能的栈_Java_秋名山码民_InfoQ写作社区