【题目】:
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。
【解法一】:
使用一个辅助栈来保存最小元素,其栈顶元素为当前栈中的最小元素。需要额外O(n)的空间复杂度。
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
template <typename T>
class StackMin { public: StackMin(void); ~StackMin(void); void Push(const T &x); void Pop(); const T &Min() const; private: stack<T> m_data; stack<T> m_min; }; template <typename T> void StackMin<T>::Push(const T &x) { m_data.push(x); if (m_min.size() == 0 || x < m_min.top()) m_min.push(x); else m_min.push(m_min.top()); } template <typename T> void StackMin<T>::Pop() { assert(m_data.size() > 0 && m_min.size() > 0); m_data.pop(); m_min.pop(); } template <typename T> const T &StackMin<T>::Min() const { assert(m_data.size() > 0 && m_min.size() > 0); return m_min.top(); } |
【解法二】:
使用1个变量记录最小值。利用存储差值而不需要辅助栈,方法比较巧妙。
http://blog.csdn.net/sgbfblog/article/details/7752878
【参考】:
http://zhedahht.blog.163.com/blog/static/25411174200712895228171/