[Leetcode 155, Easy] Min Stack

来源:互联网 发布:u盘重装centos 编辑:程序博客网 时间:2024/05/17 04:11

Problem:

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.
Analysis:

The basic idea does not comes from me. In this stack-like structure, we keep two stacks, one for all elements inserts by their original order, and the other one is for the local minimum one compared with elements before it. If the minimum element is not the last one inserted into the stack, and those ones after it are larger than it, the minimum element will not change. (i.e., the top element of the minimal value stack will not change.)

The minimum comes from the min-stack. When the minimun element is removed from the stack, it will be removed from the min-stack either. It is easy to see that the remained elements also abide by the rules set in the last paragraph. The stack-like structure works fine.

Note: If the size of inputed elements is big, the vector is not safe because its way of increasing size. (Important!!!)

Solutions:

C++:

void push(int x) {          data.push(x);          if(mindata.empty()||mindata.top()>=x)            mindata.push(x);      }        void pop() {          if(mindata.top()==data.top())            mindata.pop();          data.pop();      }        int top() {          return data.top();      }        int getMin() {          return mindata.top();      }  private:      stack<int> data;      stack<int> mindata;


Java:


Python:


0 0