题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
解题思路
1,两个栈,一个完成基本功能,一个充当辅助栈
2,辅助栈内最小值总是上浮到栈顶
代码实现
/**
*
*/
package 栈和队列;
import java.util.Stack;
/**
* <p>
* Title:MinStack
* </p>
* <p>
* Description:
* </p>
*
* @author 田茂林
* @data 2017年8月22日 上午10:40:43
*/
public class MinStack {
Stack<Integer> stack1 = new Stack<Integer>(); // 主栈
Stack<Integer> stack2 = new Stack<Integer>(); // 辅助栈,栈顶即为最小值
int min = Integer.MAX_VALUE;
public void push(int node) {
stack1.push(node);
if (min > node) {
stack2.push(node);
min = node;
} else {
stack2.push(min); //栈2的顶永远存放当前的最小值
}
}
public void pop() {
if (!stack1.isEmpty() && !stack2.isEmpty()) {
stack1.pop();
stack2.pop();
}
}
public int top() {
return stack1.peek();
}
public int min() {
return stack2.peek();
}
public static void main(String[] args) {
}
}