155. Min Stack
这个题一开始还是有点迷的,后来想清楚了,因为它是一个栈,所以pop的时候会把栈顶的元素不管大小都pop出去。比如[-3,0,-2],[getMin(),pop(),getMin()]
的答案是[-3, -3]
,第二次的结果是-3
是因为pop出了栈顶元素-2
,所以栈中只有0,-3
比较大小。
所以这个思路是s1正常的push和pop,s2记录最小值序列,另外设定push和pop条件,小于等于peek最小值push,和s1栈顶元素一样pop。
public LinkedList<Integer> s1 = new LinkedList<>();
public LinkedList<Integer> s2 = new LinkedList<>();
public void push(int x) {
s1.push(x);
if(s2.isEmpty() || x <= getMin()) s2.push(x); // 判空要在前面
}
public void pop() {
if (top() == getMin()) s2.pop();
s1.pop();
}
public int top() {
return s1.peek();
}
public int getMin() {
return s2.peek();
}