题解 | #包含min函数的栈#
包含min函数的栈
http://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49
思路:
设置两个栈s1和s2,s1存储所有元素;s2存储历史最小元素(新压入s1的元素小于s2栈顶元素则压入s2中)。取出栈顶元素时,检测是否等于s2栈顶元素,等于则s2和s1栈顶一起弹出。
代码:
public class Solution {
//设置两个栈s1、s2
Stack<Integer> s1 = new Stack<Integer>();
Stack<Integer> s2 = new Stack<Integer>();
public void push(int node) {
if (s1.size()==0 && s2.size()==0) {
s1.push(node);
s2.push(node);
}
else {
if (node<=s2.peek())
s2.push(node);
s1.push(node);
}
}
public void pop() {
if (s1.peek().equals(s2.peek()))
s2.pop();
s1.pop();
}
public int top() {
return s1.peek();
}
public int min() {
return s2.peek();
}
}
