今天算法实践第一题,从现在开始每天一到算法实战题。这个子系列是关于栈和队列的算法。我们看下题目:
题:
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
难度系数:一颗星
解析:首先明白栈的数据结构定义,先进后出。具体可以看我之前的数据结构文章。https://blog.csdn.net/qq_29434541/article/details/103795755
首先我们知道栈有入栈和出栈。但是一个栈如何标记最小值呢?
解题:
我们构建一个自定义类栈,包括两个栈,一个保存全部值,一个保存最小值。具体代码如下
package com.mxy.algorithm.Exercises.stackAndque;
import java.util.Stack;
/**
* 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
*/
public class Mystack01 {
private Stack<Integer> stackData;
private Stack<Integer> stackMin;
//初始化
public Mystack01(){
this.stackData=new Stack<>();
this.stackMin=new Stack<>();
}
//入栈
public void push(int newNum){
//如果报错最小值的栈为空则直接入栈
if (stackMin.isEmpty()){
stackMin.push(newNum);
}else if (newNum<=getMin()){
stackMin.push(newNum);
}
this.stackData.push(newNum);
}
//出栈
public int pop(){
if (stackData.isEmpty()){
throw new RuntimeException("your stack is empty.");
}
int popvalue = stackData.pop();
if (popvalue==getMin()){
stackMin.pop();
}
return popvalue;
}
private int getMin() {
if (stackMin.isEmpty()){
throw new RuntimeException("your stack is empty.");
}
return stackMin.peek();
}
public static void main(String[] args) {
Mystack01 mystack01 = new Mystack01();
mystack01.push(1);
mystack01.push(2);
mystack01.push(3);
mystack01.push(9);
mystack01.push(8);
System.out.println(mystack01.getMin());
}
}