实现最小栈
Posted Alice_yufeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现最小栈相关的知识,希望对你有一定的参考价值。
class MinStack
private int min;
private LinkedList<Integer> stack;
public MinStack()
min = Integer.MAX_VALUE;
stack = new LinkedList<>();
public void push(int val)
//如果添加的值val小于之前记录的最小值min,就需要把min入栈,将最小值min的值更新为val
//需要把min入栈的原因是,如果当前val出栈后,意味着最小值就出栈了,那么再出栈的元素就是新的最小值。
/* 栈底---------->栈顶 (-2,0,-3依次入栈)
* -2入栈,由于min的初始值为Integer.MAX_VALUE,栈的情况:MAX_VALUE, -2; min = -2
* 0入栈, 0 > min 栈的情况:MAX_VALUE, -2, 0; min = -2
* -3入栈,-3 < -2, 就得先将min入栈,再将-3入栈,栈的情况:MAX_VALUE, -2, 0,-2,-3;min = -3
*
* 此时-3出栈,-3 = min,-3出栈后就说明当前最小值-3已经无了,就得再将-2弹出,并更新最小值为-2,栈的情况:MAX_VALUE, -2, 0;min = -2 */
if (val <= min)
stack.push(min);
min = val;
stack.push(val);
public void pop()
//如果出栈元素等于记录的最小值,就说明最小值已经出栈了,那么紧接着这个出栈元素的下一个元素就是当前栈中最小值。
if (stack.pop() == min)
min = stack.pop();
public int top()
return stack.peek();
public int getMin()
return min;
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(val);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/
以上是关于实现最小栈的主要内容,如果未能解决你的问题,请参考以下文章