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();
}

results matching ""

    No results matching ""