【100题】设计包含min 函数的栈
2012-07-15 22:52
197 查看
定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。
要求函数min、push 以及pop 的时间复杂度都是O(1)。
要求函数min、push 以及pop 的时间复杂度都是O(1)。
#include <deque> #include <assert.h> #include <iostream> using namespace std; template<typename T> class MyStack { private: deque<T> m_data; deque<size_t> m_minIndex; public: //构造函数 MyStack() { } //析构函数 virtual ~MyStack() { } //判空 int isEmpty() { return m_data.size(); } //返回栈顶元素 T &top() { return m_data.back(); } //返回栈顶元素 const T &top() const { return m_data.back(); } //入栈 void push(const T &value) { m_data.push_back(value); if(m_minIndex.size() == 0) { m_minIndex.push_back(0); } else { if(value < m_data[m_minIndex.back()]) { m_minIndex.push_back(m_data.size()-1); } else { m_minIndex.push_back(m_minIndex.back()); } } } //出栈 void pop() { m_data.pop_back(); m_minIndex.pop_back(); } //返回最小值 const T &min() const { assert(m_data.size()>0); assert(m_minIndex.size()>0); return m_data[m_minIndex.back()]; } }; int main(int argc,char **argv) { MyStack<int> s; s.push(3); s.push(1); s.push(4); s.push(2); //打印栈 while(s.isEmpty()) { cout << s.top()<< " 出栈" <<endl; s.pop(); cout << "最小值:"<<s.min()<<endl; } }
相关文章推荐
- (微软100题)2.设计包含min 函数的栈。
- (微软100题)2.设计包含min 函数的栈。
- 微软面试100题系列-设计包含 min 函数的栈
- 【微软100题】002设计包含 min 函数的栈
- (微软面试100题)设计包含min 函数的栈
- 【编程题目】设计包含 min 函数的栈
- 每天学习一算法系列(3)(设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 2、设计包含min 函数的栈
- 笔试题:设计包含min 函数的栈
- 设计包含 min 函数的栈
- 设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1)
- 【练习】设计包含min 函数的栈
- 面试题系列-----数据结构(设计包含 min 函数的栈(栈))
- 2.设计包含min 函数的栈。3.求子数组的最大和
- 2.设计包含 min 函数的栈[StackWithMinValue]
- 2.设计包含min 函数的栈
- 每天学习一算法系列(3)--设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 设计包含 min 函数的栈
- No2、设计包含 min 函数的栈(栈)
- 设计包含min()函数的栈