剑指offer-21:包含min函数的栈
2017-09-08 10:46
197 查看
定义栈的数据结构,在该类型中实现一个能够得到栈的最小元素的min函数,该栈中调用min, push, pop的时间复杂度都是O(1)。
分析:
要保持栈原本性质,就需要一个栈A存放原始数据
要得到栈当前最小元素,需要一个辅助栈B,专门存储当前的最小值
A中压栈,B中压当前的最小值(要么是新的最小,要么是B栈顶最小)
代码:
分析:
要保持栈原本性质,就需要一个栈A存放原始数据
要得到栈当前最小元素,需要一个辅助栈B,专门存储当前的最小值
A中压栈,B中压当前的最小值(要么是新的最小,要么是B栈顶最小)
代码:
// offer-21-stack_min.cpp : 定义控制台应用程序的入口点。 // //#include "stdafx.h" #include <iostream> #include <stack> using namespace std; // 定义一个类,表示新栈类型 class StackMin { public: //压栈 void push(int value) { // 数据栈压栈 m_data.push(value); // 辅助栈压入新的最小 if(m_min.size()==0 || m_min.top() > value ) m_min.push(value); // 辅助栈压入原最小,仍为当前最小 else m_min.push(m_min.top()); } // 弹栈 void pop() { m_data.pop(); m_min.pop(); } // 获取当前栈顶,只和数据栈相关 int top() { return m_data.top(); } // 获取最小,只和辅助栈相关 int min() { return m_min.top(); } private: stack<int> m_data; // 数据栈 stack<int> m_min; // 存当前最小元素的栈 }; // 测试 int _tmain(int argc, _TCHAR* argv[]) { Solution a; a.push(3); a.push(4); a.push(2); a.push(1); cout << a.min() << endl; a.pop(); cout << a.min() << endl; return 0; }
相关文章推荐
- 剑指Offer-21-包含min函数的栈
- 【剑指Offer】面试题21:包含min函数的栈
- 剑指Offer面试题20顺时针打印矩阵,面试题21包含min函数的栈
- 剑指offer-面试题21.包含min函数的栈
- 剑指offer代码解析——面试题21包含min函数的栈
- 剑指Offer----面试题21:包含min函数的栈
- 剑指Offer_面试题21_包含min函数的栈
- 剑指offer面试题21:包含min函数的栈
- 【面试题】剑指Offer-21-包含Min函数的栈
- 剑指offer代码解析——面试题21包含min函数的栈
- 剑指offer21:包含min函数的栈
- [剑指offer][面试题21]包含min函数的栈
- 【剑指offer-Java版】21包含min函数的栈
- 剑指offer--面试题21:包含min函数的栈
- 剑指offer 21 包含min函数的栈
- 剑指offer--面试题21:包含min函数的栈--Java实现
- 【剑指offer】4.3举例让抽象问题具体化——面试题21:包含min函数的栈
- 剑指offer——面试题21:包含min函数的栈(泛型编程,一个巧妙的思维)
- 剑指Offer:面试题21 包含min函数的栈
- 剑指offer面试题21 包含min函数的栈