题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
思路:定义两个stack栈,一个data栈用来保存数据,另一个min栈用来保存存入栈中最小的数据。比如,data栈中一次入栈5,4,3,8,10,11,12,1,则min一次入栈5,4,3,3,3,3,1,每次入栈的时候,入栈元素小于或等于min栈顶元素则入栈,否则不如栈,入min栈顶同样大的元素。
import java.util.Stack;
public class Solution {
Stack<Integer> stack = new Stack<>();
Stack<Integer> minStack = new Stack<>();
public void push(int node) {
stack.push(node);
// 如果min为空或者node比min栈中的元素小,则入min栈
if (minStack.size() == 0 || minStack.peek() > node) {
minStack.push(node);
}
// 否则把min栈中的顶部元素入栈
else minStack.push(minStack.peek());
}
public void pop() {
if (!stack.isEmpty()) {
stack.pop();
minStack.pop();
}
}
public int top() {
return stack.peek();
}
public int min() {
return minStack.peek();
}
}