Min Stack(155)

155— Min Stack

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.

C++代码:

class MinStack {
public:
    /** initialize your data structure here. */
    void push(int x) {
      v.push_back(x);
    }
    void pop() {
      v.pop_back();
    }
    int top() {
      return v.back();
    }
    int getMin() {
      int len = v.size();
      int min = v[0];
      for(int i = 1; i < len;i++) {
        if(v[i] < min) min = v[i];
      }
      return min;
    }
private:
  vector<int> v;
};

思路1:

  • 简单的栈的应用, 遍历一下vector元素即可

思路2:

  • 一般思路是用一个变量min记录当前最小, 但如果当前最小的元素出栈, 没办法记录min 为出栈后第一小的元素(即出栈前第二小的元素)
  • 使用另一个vector min记录最小元素, 栈顶元素为当前最小
  • 当vector出栈一个元素, 如果为当前最小, min 出栈, 此次 min的栈顶仍然为当前最小元素

C++代码:

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

猜你喜欢

转载自blog.csdn.net/kelly_fumiao/article/details/85270019