栈表中获取最小值,时间复杂度为O(1)
来源:互联网 发布:bartender vb 编辑:程序博客网 时间:2024/05/16 03:24
近期复习数据结构,看到网上有一道算法题,该题目曾经是google的一道面试题,国内的互联网公司也纷纷效仿。我也顺便复习之。
题目内容为:对现在的stack(栈)数据结构进行改进,加一个min()功能,使之能在常数,即o(1),时间内给出栈中的最小值。可对push()和pop()函数进行修改,但要求其时间复杂度都只能是o(1)。
解题思路:1.由于题目要求的是一个栈,所以想要通过栈内元素进行排序,这个是不可行的。
2.由于存在每次的push和pop操作。所以,通过在入口设置最小值,然后不断更新最小值的方式也是不可取的。因为,pop一次之后就失效了。
解决方案是通过辅助栈表,由于题目只要求获得栈内剩余元素中的最小值,并没有要求每次pop出来的是最小值,我自己就陷入了这个思维。所以我们可以通过辅助栈,即数据栈每push一次,辅助栈也push一次,push的值为数据栈中的当前最小值。经过如此,最后,辅助栈每次push就均可获得数据栈中的最小值。
下面提供相关的示例代码:
//// main.cpp// 栈最小值////#include <iostream>#include <assert.h>#include <deque>using namespace std;#define MAX_SIZE 100template<typename T>//考虑到数据的多样性,采用模版class DataStack { T dataList[MAX_SIZE]; T minList[MAX_SIZE]; int top;//栈顶标记 public: DataStack(){top = -1;} void Push(T &value); T Pop(); T GetMin();};template<typename T>void DataStack<T>::Push(T &value){ top++; dataList[top] = value; if (top == 0) { minList[top] = value; } else{ if (value < minList[top-1]) { minList[top] = value; } else{ minList[top] = minList[top - 1]; } }};template<typename T>T DataStack<T>::Pop(){ minList[top] = 0; return dataList[top--];}template <typename T>T DataStack<T>::GetMin(){ return minList[top];}int main(int argc, const char * argv[]) { // insert code here... DataStack<int> dataList; int temp=9; dataList.Push(temp); temp = 8; dataList.Push(temp); temp = 13; dataList.Push(temp); temp = 35; dataList.Push(temp); cout<<dataList.GetMin()<<endl; dataList.Pop(); cout<<dataList.GetMin()<<endl; dataList.Pop(); cout<<dataList.GetMin()<<endl; dataList.Pop(); cout<<dataList.GetMin()<<endl; dataList.Pop(); return 0;}
0 0
- 栈表中获取最小值,时间复杂度为O(1)
- 获取栈中最小值函数,时间复杂度为O(1)
- 时间复杂度为O(1),求栈最大最小值和pop,push操作
- 实现一个栈,实现入栈,出栈,求最小值,时间复杂度为O(1)
- 实现一个栈,要求Push/Pop/Min(返回最小值)的时间复杂度为O(1)
- 实现一个栈的pop,push,Min(最小值),时间复杂度为O(1)
- 实现一个栈,push、pop、求栈中最小值min的时间复杂度为O(1)
- 时间复杂度为O(n),空间复杂度为O(1)
- 常用数据结构2——栈,实现PUSH、POP和取最小值操作算法时间复杂度为o(1)
- Chapter 3 | Stacks and Queues--实现一个函数返回栈中的最小值,时间复杂度为O(1)
- 设计栈结构构造min()函数,也就是求栈中元素的最小值,要求pop、push、min时间复杂度为O(1)
- 设计一个带MIN的栈,要求出栈,入栈,返回最小值的时间复杂度为O(1)
- 实现一个栈Stack,Push、Pop、Min(返回最小值的操作)的时间复杂度为O(1)
- 17_7_19:实现一个栈要求实现入栈、出栈、获得最小值的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push、Pop、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个出栈,入栈,返回最小值的操作的时间复杂度为O(1)的栈
- 实现一个栈,获取其中最大元素,获取时间复杂度为O(1)
- 查找数组最大值最小值:时间复杂度最多为:o(3n/2)
- android unable to get system library
- 和为S的连续正数序列
- DOM4J
- php max() min() 返回最大值和最小值
- 把电脑是那个的图片通过命令放到手机或模拟器上
- 栈表中获取最小值,时间复杂度为O(1)
- PAT1022D进制的A+B (20)
- 真正二分找错环节
- shell具体执行过程及自主实现shell解释器
- Problem-1001
- NSTimer 不准时,使用GCD定时器代替的方法
- Maven pom.xml 配置详解
- CodeForces-546A-Soldier and Bananas
- Android 自定义View 总结