2.设计包含 min 函数的栈[StackWithMinValue]
2014-05-20 10:03
253 查看
【题目】:
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。
【解法一】:
使用一个辅助栈来保存最小元素,其栈顶元素为当前栈中的最小元素。需要额外O(n)的空间复杂度。
C++ Code
【解法二】:
使用1个变量记录最小值。利用存储差值而不需要辅助栈,方法比较巧妙。
/article/2939870.html
【参考】:
http://zhedahht.blog.163.com/blog/static/25411174200712895228171/
/article/3642055.html
/article/2939870.html
定义栈的数据结构,要求添加一个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个变量记录最小值。利用存储差值而不需要辅助栈,方法比较巧妙。
/article/2939870.html
【参考】:
http://zhedahht.blog.163.com/blog/static/25411174200712895228171/
/article/3642055.html
/article/2939870.html
相关文章推荐
- 设计包含 min 函数的栈
- 每天学习一算法系列(3)(设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 数据结构——算法之(009)( 设计包含min 函数的栈)
- NO.2 设计包含min 函数的栈
- 第二题 设计包含min 函数的栈。
- 设计包含 min 函数的栈
- 面试题系列-----数据结构(设计包含 min 函数的栈(栈))
- 笔试题:设计包含min 函数的栈
- 设计包含 min 函数的栈
- 2、设计包含min 函数的栈
- 2.设计包含min 函数的栈。
- 微软面试100题系列-设计包含 min 函数的栈
- 第二题(设计包含min 函数的栈)
- 微软面试题系列(二):设计包含 min 函数的栈
- (微软100题)2.设计包含min 函数的栈。
- 设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1)
- 设计一个包含pop,push,min在内的栈,并且各个函数的时间复杂度均为o(1)
- (微软面试100题)设计包含min 函数的栈
- 2.设计包含min 函数的栈。3.求子数组的最大和
- 面试题三:设计包含 min 函数的栈。