Min Stack

155. Min Stackarrow-up-right

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

  • push(x) -- Push element x onto stack.

  • pop() -- Removes the element on top of the stack.

  • top() -- Get the top element.

  • getMin() -- Retrieve the minimum element in the stack.

Example:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> Returns -3.
minStack.pop();
minStack.top();      --> Returns 0.
minStack.getMin();   --> Returns -2.

My Solutions:

1。 方法1:用两个stack。一个栈来按顺序存储 push 进来的数据,另一个栈去存最小值,也就是用栈顶保存当前所有元素的最小值。必须要用另一个stack保存最小值的原因是,当最小的值被pop出去,次小的值必须在最顶端。

push:stack 直接push,这个元素和minStack里peek的值比较:

  • 如果新加入的元素大于栈顶元素,不操作

  • 如果新加入的元素小于等于栈顶元素,pop进minStack

pop:记录下stack直接pop的值,然后:

  • 如果这个值不是minStack里的最小值,不操作。

  • 如果这个值也是minStack里的最小值,minStack也pop。

top:stack 直接peek。

getMin:

  • 如果minStack不为空,从minStack peek

  • 如果minStack为空,从stack peek

2。 方法2:用一个stack,和一个int min存最小值。

push:先比较当前值和min,如果当前值比现有的min小,先把现有的min push进去,更新min为当前值。最后再push当前值。这样保证stack的最顶端一定是最小值。同时,当最小的值被pop出去,次小的值在最顶端,这样就知道此时最小值是多少。

pop:pop出来的值等于min,则需要再pop一次,把这个min的值更新。

top:stack直接peek

getMin:直接返回min

Last updated