- 题目:实现一个栈,能在o(n)的时间复杂度内进行pop,push,top以及获取栈内最小元素
- 难度:Easy
- 思路:用两个java原生的stack来实现,一个stackData,对每次pop,push,top等操作,stackData也进行相应的操作,而stackMin主要用来存储“最小值”(最小值的定义:截止当前最小即当前值比stackMin的最小值,则该值需要被压入stackMin)
- 代码:
public class MinStack {
/** initialize your data structure here. */
private Stack<Integer> stackMin;
private Stack<Integer> stackData;
public MinStack() {
this.stackMin = new Stack<>();
this.stackData = new Stack<>();
}
public void push(int x) {
this.stackData.push(x);
if(stackMin.size() == 0){
stackMin.push(x);
}else{
if(x <= this.getMin()){
stackMin.push(x);
}
}
}
public void pop() {
if(this.stackData.size() == 0){
throw new RuntimeException("the stack is empty");
}else{
int value = stackData.pop();
if(value == this.getMin()){
this.stackMin.pop();
}
}
}
public int top() {
if(stackData.size() == 0){
throw new RuntimeException("the stack is empty");
}else{
int value = stackData.pop();
stackData.push(value);
return value;
}
}
public int getMin() {
if(stackMin.size() == 0){
throw new RuntimeException("the stack is empty");
}else{
int value = stackMin.peek();
return value;
}
}
}