要求:设计一个new class,实现push,pop,getMin,复杂度O(1)
思路:两个栈一起用,一个做正常栈使用(normalStack),一个用于存放最小值(minStack),minStack中随着normal中的压入一起,当它为空的时候压入第一个元素,不空的时候,只压入比栈顶元素小的。pop的时候也是,如果normal中pop的比min中栈顶元素大,min不操作,若相等,一起pop更新。实际就是压入的反向过程。最后,getMin的时候,直接返回min的栈顶即可。
总结:自己写的代码,缺少pop,getMin时,栈为空的判断及处理(直接throw new RuntimeException(".."))
缺少一个类的构造?就是指明this.,以及后续功能函数中,都没有用this.来指代。
import java.util.*;
public class MyStack{
private Stack<Integer> normalStack;
private Stack<Integer> minStack;
public MyStack() {
this.normalStack = new Stack<Integer>();
this.minStack = new Stack<Integer>();
}
public void push(int num) {
this.normalStack.push(num);
if(this.minStack.isEmpty()) {
this.minStack.push(num);
}else {
if(num<this.minStack.peek()) {
this.minStack.push(num);
}
}
}
public int pop() {
if(this.normalStack.isEmpty()) {
throw new RuntimeException("Empty");
}
if(this.minStack.peek()==this.normalStack.peek()) {
this.minStack.pop();
}
return this.normalStack.pop();
}
public int getMin() {
if(this.minStack.isEmpty()) {
throw new RuntimeException("Empty");
}
return this.minStack.peek();
}
}