算法2_实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)
来源:互联网 发布:天金加银软件 编辑:程序博客网 时间:2024/05/17 14:27
实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值。
push,pop和min函数的时间复杂度都为O(1)。
看到这个题目最直接的反应是用一个变量来保存当前栈的最小值,让我们来看看这样可行否?
如果栈一直push那是没有问题,入栈元素如果比当前最小值还小,那就更新当前最小值。
可是如果pop掉的栈顶元素就是最小值,那么我们如何更新最小值呢?显然不太好办。
既然只用一个变量没法解决这个问题,那我们就增加变量。如果说每个结点除了保存当前的 值,
另外再保存一个从该结点到栈底的结点中的最小值。那么,不论哪个结点成为了栈顶结 点,
我们都有办法取得剩下的这些元素的最小值。代价是付出的空间多了一倍。代码不写了。
下面在介绍一种方法,我们可以在用一个栈来保存栈的最小值:
比如有一组数要入栈: 10 11 6 2 12
栈S1: 10 11 6 2 12
栈S2: 10 6 2
即到栈顶12时,最小值是2, 如果S1栈12出,和S2.top比较,如果大于S2.top,则S2不做
任何操作,如果等于S2.top, 则S2.pop(); 比如S1的2出栈时,2 == S2.top(), 然后S2.pop();
这样就节省了很多空间。
但是上述方法还有问题:
比如数据
S1:10 11 6 2 2 2 12 这时
S2:10 11 6 2
当S1中2出栈时,S2中的2也会出栈,这样我们才去S1的最小值时就是6,明显错了。解决方法就是
push,pop和min函数的时间复杂度都为O(1)。
看到这个题目最直接的反应是用一个变量来保存当前栈的最小值,让我们来看看这样可行否?
如果栈一直push那是没有问题,入栈元素如果比当前最小值还小,那就更新当前最小值。
可是如果pop掉的栈顶元素就是最小值,那么我们如何更新最小值呢?显然不太好办。
既然只用一个变量没法解决这个问题,那我们就增加变量。如果说每个结点除了保存当前的 值,
另外再保存一个从该结点到栈底的结点中的最小值。那么,不论哪个结点成为了栈顶结 点,
我们都有办法取得剩下的这些元素的最小值。代价是付出的空间多了一倍。代码不写了。
下面在介绍一种方法,我们可以在用一个栈来保存栈的最小值:
比如有一组数要入栈: 10 11 6 2 12
栈S1: 10 11 6 2 12
栈S2: 10 6 2
即到栈顶12时,最小值是2, 如果S1栈12出,和S2.top比较,如果大于S2.top,则S2不做
任何操作,如果等于S2.top, 则S2.pop(); 比如S1的2出栈时,2 == S2.top(), 然后S2.pop();
这样就节省了很多空间。
但是上述方法还有问题:
比如数据
S1:10 11 6 2 2 2 12 这时
S2:10 11 6 2
当S1中2出栈时,S2中的2也会出栈,这样我们才去S1的最小值时就是6,明显错了。解决方法就是
S2中每个元素添加一个计数器。这样当连续3次2出栈,S2中的2才出栈。
原文来自:http://blog.csdn.net/xiaoliangsky/article/details/38762113?utm_source=tuicool&utm_medium=referral
0 0
- 011实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)
- 算法2_实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)
- cc150:实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值。
- 实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,
- 实现一个栈,要求Push/Pop/Min(返回最小值)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push、Pop、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,Push、Pop、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈的pop,push,Min(最小值),时间复杂度为O(1)
- 实现一个栈,push、pop、求栈中最小值min的时间复杂度为O(1)
- 【栈队列】实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 栈--实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 【数据结构】实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- ~实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)~
- 剑指offer 21---实现一个栈, 要求实现Push( 出栈) 、 Pop( 入栈) 、 Min( 返回最小值的操作) 的时间复杂度为O(1)
- 1. 实现一个栈,要求实现 Push (出栈)、 Pop (入栈)、 Min (返回最小值的操作) 的时间复杂度为 O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- TCP/IP协议简单解释
- PHP 中 implode() explode() 解析
- POI导出Excel之一:就这么快!
- 关闭Socket
- 设置Socket
- 算法2_实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)
- android---- Serializable 和 Parcelable 区别
- 创建Socket
- 周易的江湖
- poj 3104 Drying 二分+基本数学
- Socket
- Android中IntentService的原理及使用
- Divide Two Integers
- HashMap分析