Min Stack问题及解法

来源:互联网 发布:消防工程师软件 编辑:程序博客网 时间:2024/05/16 17:42

问题描述:

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.
示例:

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.
问题分析:

push,pop和top操作不用多说,关键是getMin要求在常量时间内找到最小值,一般的思路我们就是以空间换时间,在另一个栈中保存当前栈的最小值,每次查询当前栈最小值时,只需要进行top操作即可。


过程详见代码:

class MinStack {public:    vector<int> minstack;vector<int> minvalue;    /** initialize your data structure here. */    MinStack() {            }        void push(int x) {        minstack.push_back(x);        if(minvalue.empty() || x <= getMin()) minvalue.push_back(x);    }        void pop() {    if(minstack.back() == getMin()) minvalue.pop_back();        minstack.pop_back();    }        int top() {        return minstack.back();    }        int getMin() {        return minvalue.back();    }};


0 0