leetcode - 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.
1 class MinStack { 2 public: 3 int data[100000]; 4 int minvalue[100000]; 5 int size=0; 6 7 void push(int x) { 8 data[size] = x; 9 if(size == 0 || x<=minvalue[size-1]){ 10 minvalue[size] = x; 11 } 12 else{ 13 minvalue[size] = minvalue[size-1]; 14 } 15 size++; 16 } 17 18 void pop() { 19 if(size!=0){ 20 size--; 21 } 22 //if(size<=posMin) posMin = -1; 23 } 24 25 int top() { 26 return data[size-1]; 27 28 } 29 30 int getMin() { 31 if(size==0) return 0; 32 return minvalue[size-1]; 33 } 34 };
思路: 前几个函数都比较简单,有问题的是getMin,如果每次都遍历找最小的话显然不能达到constan time,所以建立一个和stack大小相同的stack,存放当前最小值,然后每次pop和push时维护。
这样可以常数时间内检索。
空间优化:可以每次push的时候,如果大于当前最小值则不用改变,小于时同时push即可。