实现O(1)时间复杂度带有min和max 函数的栈
2014-10-28 22:00
288 查看
只是演示实现,不考虑栈使用的数据结构是vector 还是其他容器。
代码如下
代码如下
#include <iostream> #include <vector> using namespace std; template <class T> class minMaxStack { public: minMaxStack() { DataStack = new vector<T>; minStack = new vector<int>; maxStack = new vector<int>; } ~minMaxStack() { delete DataStack; delete minStack; delete maxStack; } bool isEmpty() { return DataStack->size() == 0; } void push(T data) { if (isEmpty()) { DataStack->push_back(data); minStack->push_back(0); maxStack->push_back(0); } else { DataStack->push_back(data); int minIndex = *(minStack->end()-1); int maxIndex = *(maxStack->end()-1); int min = *(DataStack->begin() + minIndex); int max = *(DataStack->begin() + maxIndex); if (min > data) { minStack->push_back(DataStack->size() - 1); } else { minStack->push_back(minIndex); } if (max > data) { maxStack->push_back(maxIndex); } else { maxStack->push_back(DataStack->size() - 1); } } } T getTop() { return *(DataStack->end()-1); } void pop() { if (isEmpty()) { return; } minStack->erase(minStack->end()-1); maxStack->erase(maxStack->end()-1); DataStack->erase(DataStack->end()-1); } T max() { return *(DataStack->begin() + (*(maxStack->end()-1))); } T min() { return *(DataStack->begin() + (*(minStack->end()-1))); } void printStack() { cout << "栈顶:" << getTop() << endl; cout << "最小:" << min() << endl; cout << "最大:" << max() << endl; cout << "\n\n"; } private: vector<T> * DataStack; vector<int> * minStack; vector<int> * maxStack; }; void main() { minMaxStack<int> st; st.push(6); st.printStack(); st.push(17); st.printStack(); st.push(7); st.printStack(); st.push(3); st.printStack(); st.pop(); st.printStack(); st.pop(); st.printStack(); st.pop(); st.printStack(); cin.get(); }
相关文章推荐
- 实现O(1)时间复杂度带有min和max 函数的栈
- 面试题:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素,要求函数min,push及pop的时间复杂度都是O(1)
- 设计一个堆栈,函数min、push 以及pop 的时间复杂度都是O(1)
- 实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈, 其 Push,Pop,Min 操作的 时间复杂度 均为 O( 1 )
- 实现一个 能在O(1)时间复杂度 完成 Push、Pop、Min操作的 栈
- 设计一个包含pop,push,min在内的栈,并且各个函数的时间复杂度均为o(1)
- 【数据结构】实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 每天学习一算法系列(3)--设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 剑指offer 21---实现一个栈, 要求实现Push( 出栈) 、 Pop( 入栈) 、 Min( 返回最小值的操作) 的时间复杂度为O(1)
- 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。
- 设计桟的 min、push以及pop的时间复杂度都是O(1) Java 实现
- 定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(1)
- 实现一个栈,要求Push/Pop/Min(返回最小值)的时间复杂度为O(1)
- 每天学习一算法系列(3)(设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1)
- 定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。要求函数 min、push 以及 pop 的时间复杂度都是 O(1)。
- 定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(1)
- 【面试题】实现一个栈要求Push,Pop,Min(返回栈中最小值的操作)的时间复杂度为O(1)
- 实现一个栈,要求push(入栈),pop(出栈),min(返回栈中的最小值)的时间复杂度为O(1);