41. 包含min函数的栈
设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。
- push(x)–将元素x插入栈中
- pop()–移除栈顶元素
- top()–得到栈顶元素
- getMin()–得到栈中最小元素
样例
MinStack minStack = new MinStack();
minStack.push(-1);
minStack.push(3);
minStack.push(-4);
minStack.getMin(); --> Returns -4.
minStack.pop();
minStack.top(); --> Returns 3.
minStack.getMin(); --> Returns -1.
1 class MinStack { 2 public: 3 /** initialize your data structure here. */ 4 stack<int> stk,stk_min; 5 MinStack() { 6 7 } 8 9 void push(int x) { 10 stk.push(x); 11 if(stk_min.size()) 12 x=min(x,stk_min.top()); 13 stk_min.push(x); 14 } 15 16 void pop() { 17 stk.pop(); 18 stk_min.pop(); 19 } 20 21 int top() { 22 return stk.top(); 23 } 24 25 int getMin() { 26 return stk_min.top(); 27 } 28 };
思路:
牺牲空间复杂度换取时间复杂度。
如果遍历栈找到最小值,那么时间复杂度为O(n)。
要满足在O(1)时间内查找到最小值,可以再开一个栈,该栈的第n项为前n个元素中的最小值,和原栈同时进栈和出栈,进栈元素是取原栈顶元素和新进元素的最小值。