剑指Offer——包含min函数的栈

题目描述:

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。


分析:

 这题讲究效率,如果出栈一个一个的找,时间效率低下。

 所以我们用空间换时间,定义一个辅助栈,存储当前的最小值。

 入栈时,如果值是当前栈的最小值,则把值一并入辅助栈,不然只需要入主栈即可。

 出栈时,如果当前栈的最小值要出栈了,那么主栈和辅助栈一并出栈。

 辅助栈的栈顶元素一直都是当前栈的最小值。


代码:

 1 struct Stack {  // 自定义栈
 2     stack<int> myStack; // 主栈
 3     stack<int> myMin;   // 辅助栈,存最小值的栈
 4 };
 5 class Solution {
 6 public:
 7     Stack s;
 8     void push(int value) {  // 入栈
 9         s.myStack.push(value);  // 值入主栈
10         if(s.myMin.empty())
11             s.myMin.push(value);
12         if(value <= s.myMin.top())  // 最小值入辅助栈
13             s.myMin.push(value);
14     }
15     void pop() {    // 如果主栈栈顶是最小值,主栈和辅助栈都出栈
16         if(s.myStack.top() == s.myMin.top())
17             s.myMin.pop();
18         s.myStack.pop();
19     }
20     int top() {
21         return s.myStack.top();
22     }
23     int min() {
24         return s.myMin.top();
25     }
26 };

 

posted @ 2017-10-29 11:09  叶建成  阅读(185)  评论(0编辑  收藏  举报