【微软100题】002设计包含 min 函数的栈
2015-01-22 15:59
288 查看
/* * 题目: * 2.设计包含 min 函数的栈(栈) * 定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。 * 要求函数 min、 push 以及 pop 的时间复杂度都是 O(1)。 */ #include <iostream> using namespace std; /* * 想法:用数组实现一个栈,这样 push和pop的时间复杂度都是O(1),每个数组元素,除了key值之外,还有一个值为当前元素到栈底元素之中的最小值 */ struct CMinStack { struct CItem { int m_nKey; int m_nMin; CItem(int key) : m_nKey(key), m_nMin() { } CItem() : m_nKey(), m_nMin() { } }; int m_pTop; //指向栈顶元素的位置 CItem* m_aKeys; //用于存放元素的数组 CMinStack(int len) : m_pTop(-1) { //初始时没有元素,让栈顶指向-1 m_aKeys = new CItem[len]; } ~CMinStack() { //做一些内存清理的工作,防止内存泄露 m_pTop = -1; delete[] m_aKeys; } /* * 压栈 */ void Push(int key) { this->m_aKeys[++m_pTop].m_nKey = key; //先赋值 if (m_pTop > 0) { //表明之前已经有压入的元素,说明m_nMin值已经存在 if (key < this->m_aKeys[m_pTop - 1].m_nMin) { this->m_aKeys[m_pTop].m_nMin = key; } else { this->m_aKeys[m_pTop].m_nMin = this->m_aKeys[m_pTop - 1].m_nMin; } } else { this->m_aKeys[m_pTop].m_nMin = key; } } /* * 出栈 */ int pop() { return this->m_aKeys[m_pTop--].m_nKey; } /* * 求最小值 */ int min() { return this->m_aKeys[m_pTop].m_nMin; } }; int main() { CMinStack* c_min_stack = new CMinStack(10); c_min_stack->Push(5); c_min_stack->Push(8); c_min_stack->Push(-99); c_min_stack->Push(1024); c_min_stack->Push(6); c_min_stack->Push(3); c_min_stack->Push(0); c_min_stack->Push(1); c_min_stack->Push(-987); cout << c_min_stack->min() << endl; c_min_stack->pop(); cout << c_min_stack->min() << endl; return 0; }
相关文章推荐
- (微软面试100题)设计包含min 函数的栈
- 微软面试100题系列-设计包含 min 函数的栈
- (微软100题)2.设计包含min 函数的栈。
- (微软100题)2.设计包含min 函数的栈。
- 【从零单排之微软面试100题系列】02之包含 min 函数的栈
- 【100题】设计包含min 函数的栈
- 微软面试(2/100)--设计包含函数的栈
- 微软面试题系列(二):设计包含 min 函数的栈
- 2.设计包含min 函数的栈。
- 设计一个包含pop,push,min在内的栈,并且各个函数的时间复杂度均为o(1)
- 【练习】设计包含min 函数的栈
- 每天学习一算法系列(3)(设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 设计包含 min 函数的栈
- 微软等面试100题筛选答案-2-设计包含min函数的栈
- NO.2 设计包含min 函数的栈
- 【微软100面试题实现】第02题:设计包含min函数的栈
- 设计包含min 函数的栈(push\pop\min)
- 2.设计包含min 函数的栈
- [微软面试100题] 设计包含min函数的栈
- 【微软面试100题】2.设计包含min函数的栈