题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
题解:
得到栈中所含最小元素,时间复杂都为O(1),那么只有可能是栈顶的元素是最小的。但是设计的栈还要符合先进后出的特性。所以利用两个栈,一个栈存放元素,另外一个栈存放当前栈中最小的元素。比如存放数据为3,4,2,3,则两个栈的元素由下图表所示。
存放的元素 | 数据栈的元素 | 最小栈的元素 | 最小值 |
3 | 3 | 3 | 3 |
4 | 3,4 | 3,3 | 3 |
2 | 3,4,2 | 3,3,2 | 2 |
3 | 3,4,2,3 | 3,3,2,2 | 2 |
import java.util.Stack;
class Solution {
private Stack<Integer> stack = new Stack();
private Stack<Integer> min = new Stack();
public void push(int node) {
//假设栈为空,则在两个栈中存放元素
if (stack.isEmpty()) {
stack.push(node);
min.push(node);
} else {
//比较node的值与最小栈的栈顶的值
if (min.peek() > node) {
min.push(node);
} else {
min.push(min.peek());
}
stack.push(node);
}
}
public void pop() {
stack.pop();
min.pop();
}
public int top() {
return min.peek();
}
public int min() {
return top();
}
}