题目链接:
https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
由题目中定义,该类型中既要有栈的数据结构,也要有一个存储最小元素的数据结构。那么我们定义两个栈,一个用来存储栈本来的数据,一个用来存储栈中的最小元素。
代码:
class MinStack {
/** initialize your data structure here. */
Stack<Integer> A,B;
//定义两个栈
public MinStack() {
A = new Stack<>();
B = new Stack<>();
}
//在push进数据的时候,筛选出最小元素push进栈B,这样栈B的栈顶永远都是最小的元素。
//而且栈B中,从栈顶到栈底,元素是从小到大排列的。
public void push(int x) {
A.push(x);
if(B.isEmpty() || B.peek() >= x){
B.push(x);
}
}
//删除数据的时候,如果删除的是最小元素,那么也要删除栈B中的元素
public void pop() {
if(A.peek().equals(B.peek())){
B.pop();
A.pop();
}else{
A.pop();
}
}
public int top() {
return A.peek();
}
//最小的元素在栈B的栈顶
public int min() {
return B.peek();
}
}