面试题:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素,要求函数min,push及pop的时间复杂度都是O(1)
2013-07-10 10:15
691 查看
思路:
在栈里添加一个成员变量存放最小元素(或最小元素的位置)。每次push一个新元素进栈的时候,如果该元素比当前的最小元素还要小,则更新最小元素。但是仅仅只添加一个成员变量存放最小元素(或最小元素的位置)是不够的,因为如果当前最小元素被pop出去,如何才能得到下一个最小元素?所以我们需要一个辅助栈。每次push一个新元素的时候,同时将最小元素(或最小元素的位置。考虑到栈元素的类型可能是复杂的数据结构,用最小元素的位置将能减少空间消耗)push到辅助栈中;每次pop一个元素出栈的时候,同时pop辅助栈。
参考代码:
在栈里添加一个成员变量存放最小元素(或最小元素的位置)。每次push一个新元素进栈的时候,如果该元素比当前的最小元素还要小,则更新最小元素。但是仅仅只添加一个成员变量存放最小元素(或最小元素的位置)是不够的,因为如果当前最小元素被pop出去,如何才能得到下一个最小元素?所以我们需要一个辅助栈。每次push一个新元素的时候,同时将最小元素(或最小元素的位置。考虑到栈元素的类型可能是复杂的数据结构,用最小元素的位置将能减少空间消耗)push到辅助栈中;每次pop一个元素出栈的时候,同时pop辅助栈。
参考代码:
#include <stdlib.h> #include <assert.h> #include <string.h> #include <iostream> #include <stack> using namespace std; class sTack { private: stack<int>datestack; stack<int>minstack; public: void push(int k) { datestack.push(k); if(!minstack.size()) minstack.push(k); else if(k<=minstack.top()) minstack.push(k); } void pop() { assert(datestack.size()>0); assert(minstack.size()>0); if(datestack.top()==minstack.top()) minstack.pop(); datestack.pop(); } int min() { return minstack.top(); } int top() { return datestack.top(); } }; int main() { sTack T; T.push(2); T.push(6); T.push(3); T.push(1); T.push(3); T.push(5); T.push(4); T.push(2); for(int i=0;i<8;i++) { cout<<T.min()<<endl; T.pop(); } return 0; }
相关文章推荐
- 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)
- 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。
- 定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。要求函数 min、push 以及 pop 的时间复杂度都是 O(1)。
- 定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(1)
- 定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(1)
- 定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(1)
- 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。o(1)空间的代码实现
- 请设计包含min函数的栈,定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素
- 定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素
- 2定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素
- 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素
- 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。时间复杂度都是O(1)
- 每天学习一算法系列(3)--设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 自定义栈类型,具有找到站内最小元素的min函数 ,且min(),pop(),push()函数的时间复杂度为O(1)
- 构造栈的数据结构,要求实现min函数,通过min函数取得栈中的最小值。要求PUSH, POP, MIN的时间复杂度为O(1)
- 定义一个栈的数据结构,实现min函数,要求push,pop,min时间复杂度是0(1);找出字符串中的最长子串,要求子串不含重复字符,时间复杂度是O(n);
- 每天学习一算法系列(3)(设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 定义一个栈的数据结构,实现min函数,要求push,pop,min时间复杂度是0(1);找出字符串中的最长子串,要求子串不含重复字符,时间复杂度是O(n);
- 设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1)
- 17.定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。