题目:实现一个特殊的栈,在基本功能的基础上,再实现返回栈中最小元素的功能
1)pop、push、getMin操作的时间复杂度都是 O(1)。
2)设计的栈类型可以使用现成的栈结构。
思路:维护两个Stack 一个保存数据,另外一个保存最小值,push 和 pop 时候单独处理minStack,比较当前操作数和栈顶值大小
public static class MyStack {
Stack<Integer> numStack = new Stack<>();
Stack<Integer> minStack = new Stack<>();
public void push(int num){
numStack.push(num);
if(minStack.isEmpty() || num<=minStack.peek()){
minStack.push(num);
}
}
public int pop(){
if(numStack.isEmpty()){
throw new RuntimeException("空了");
}
if(numStack.peek() == minStack.peek()){
minStack.pop();
}
return numStack.pop();
}
public int getmin() {
if(minStack.isEmpty()){
throw new RuntimeException("空了");
}
return minStack.peek();
}
}