定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是
O(1)。
解析:
1.首先初始化两个栈A,B
2.将栈A中非严格排序的数字存入栈B中
3.push函数中的意义为依次将数字加入A中,B若为空或者入栈的数字小于栈B中的数字,再加入栈B中
4.pop函数是为了使栈A中和栈B的栈顶重复的数字进行同步
5.top函数则表示的是A栈顶的数字
6.最小的数是B栈顶的数字
class MinStack {
Stack<Integer> A,B;
public MinStack() {
A=new Stack<>();
B=new Stack<>();
}
public void push(int x) {
A.add(x);
if(B.empty()||B.peek()>=x){
B.add(x);
}
}
public void pop() {
if(A.pop().equals(B.peek())){
B.pop();
}
}
public int top() {
return A.peek();
}
public int min() {
return B.peek();
}
}