1.自写
这里有坑就是关于栈为空的情况应怎么操作,我觉得这是比较省空间的
/**
* Created by XQF on 2017/8/13.
*/
public class MinStack {
Stack<Integer> s1;
Stack<Integer> s2;
int min = Integer.MAX_VALUE;
public MinStack() {
s1 = new Stack<>();
s2 = new Stack<>();
}
public void push(int number) {
// write your code here
if (number < min) {
min = number;
s2.push(min);
}
s1.push(number);
}
public int pop() {
int temp = s1.pop();
if (temp == min) {
min = s2.pop();
}
return temp;
}
public int min() {
// write your code here
if (!s1.isEmpty()) {
return s2.peek();
}
return 0;
}
public static void main(String[] args) {
MinStack stack = new MinStack();
stack.push(2);
stack.push(1);
stack.push(9);
System.out.println(stack.min());
stack.pop();
System.out.println(stack.min());
stack.pop();
System.out.println(stack.min());
}
}
2.九章
但是看代码也是没有判断使用min的时候是不是为空呀。
// version 1:
public class MinStack {
private Stack<Integer> stack;
private Stack<Integer> minStack;
public MinStack() {
stack = new Stack<Integer>();
minStack = new Stack<Integer>();
}
public void push(int number) {
stack.push(number);
if (minStack.isEmpty()) {
minStack.push(number);
} else {
minStack.push(Math.min(number, minStack.peek()));
}
}
public int pop() {
minStack.pop();
return stack.pop();
}
public int min() {
return minStack.peek();
}
}