剑指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 };