-
题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。
-
分析:
首先想到的是在栈里添加一个成员变量用来保存最小的元素,每次压入一个新元素进栈时与该变量比较,如果更小则更新最小元素。那么问题来了,如果当前栈中最小元素出栈,我们就无法得到当前栈中的最小元素了。
所以我们只用一个变量保存最小值是不够的了,可以使用另一个辅助栈来保存每次的最小值(即之前的最小元素和新入栈的元素两者的最小值),辅助栈中的元素个数和数据栈中的元素个数是一样的,辅助栈栈顶元素即当前数据栈的最小值。code:
public: void push(int value) { dataStack.push(value); if(minStack.empty() || value < minStack.top()) minStack.push(value); else minStack.push(minStack.top()); } void pop() { if(!dataStack.empty() && !minStack.empty()){ dataStack.pop(); minStack.pop(); } } int top() { return dataStack.top(); } int min() { return minStack.top(); } private: stack<int> dataStack,minStack;
晚来天欲雪,能饮一杯无?