栈-41

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个元素中的最小值,和原栈同时进栈和出栈,进栈元素是取原栈顶元素和新进元素的最小值。

原文地址:https://www.cnblogs.com/zuiaimiusi/p/10655387.html