元素函数编程之美系列之栈和队列1—在O(1)的时间内得到栈的最大或者最小值
2013-04-30 18:03
253 查看
最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--元素函数
1、义定栈的数据结构,求要添加一个min函数,够能失掉栈的小最元素。对于找最大值是实其一个理道,这里就不话废了。
求要:函数min、push、pop的时间复杂度都是o(1)
这里用一个帮助栈去动态的维护栈的小最值,所以pop的时候直接--top就够能了,而取小最值的时候取MinStack[top]就OK了。太单简了,没写成函数。
每日一理道
成熟是一种明亮而不刺眼的光辉,一种圆润而不腻耳的音响,一种不需要对别人察颜观色的从容,一种终于停止了向周围申诉求告的大气,一种不理会哄闹的微笑,一种洗刷了偏激的淡漠,一种无须声张的厚实,一种并不陡峭的高度。
OK,其实这不是我想说的重点,因为这个太单简了。那我要说的重点是什么呢?如果说需要在O(1)的时间内获得队列的最大或者小最值呢?(哎呀,最大值一样的撒)那怎么破????好,等我写好代码以后再来充补吧!
OK,重点来了,详情请猛击博客:/article/2756263.html
文章结束给大家分享下程序员的一些笑话语录:
这个世界上只有10种人:懂得二进制的和不懂得二进制的。
1、义定栈的数据结构,求要添加一个min函数,够能失掉栈的小最元素。对于找最大值是实其一个理道,这里就不话废了。
求要:函数min、push、pop的时间复杂度都是o(1)
这里用一个帮助栈去动态的维护栈的小最值,所以pop的时候直接--top就够能了,而取小最值的时候取MinStack[top]就OK了。太单简了,没写成函数。
#include<stdio.h> const int N = 30; int stack1 ; int top1; int MinStack ; inline int min(const int a, const int b) { return a < b ? a : b; } //有元素入栈的时候,维护MinStack数组 void Add(int *stack, int *MinStack, int &top, int v) { if(top > -1) { stack[++top] = v; MinStack[top] = min(MinStack[top - 1], v); } else stack[top] = MinStack[++top] = v; } int main() { int n,IsPush,i,v; while(scanf("%d", &n) != EOF) { top1 = -1; for(i = 0; i < n; ++i) { printf("入输操纵选项:\n0 除删栈顶元素 1 增长元素 其它 失掉小最值:"); scanf("%d", &IsPush); if(IsPush == 1) { printf("入输要添加的数:"); scanf("%d", &v); Add(stack1, MinStack, top1, v); } else if(!IsPush) { --top1; } else { if(top1 > -1) { printf("栈中元素为:\n"); for(int j = 0; j <= top1; ++j) printf("%d ", stack1[j]); printf("\n小最值为:%d\n", MinStack[top1]); } else printf("空栈\n"); } }//end for printf("over\n"); }//end while }
每日一理道
成熟是一种明亮而不刺眼的光辉,一种圆润而不腻耳的音响,一种不需要对别人察颜观色的从容,一种终于停止了向周围申诉求告的大气,一种不理会哄闹的微笑,一种洗刷了偏激的淡漠,一种无须声张的厚实,一种并不陡峭的高度。
OK,其实这不是我想说的重点,因为这个太单简了。那我要说的重点是什么呢?如果说需要在O(1)的时间内获得队列的最大或者小最值呢?(哎呀,最大值一样的撒)那怎么破????好,等我写好代码以后再来充补吧!
OK,重点来了,详情请猛击博客:/article/2756263.html
文章结束给大家分享下程序员的一些笑话语录:
这个世界上只有10种人:懂得二进制的和不懂得二进制的。
相关文章推荐
- 编程之美系列之栈和队列1—在O(1)的时间内得到栈的最大或者最小值
- 编程之美系列之栈和队列2—在O(1)的时间内得到队列的最大或者最小值
- layui设置日期最大值或者最小值为当前时间
- 有趣的题目系列一:实现具有最大值、最小值、中间值的栈和队列
- mysql group by分组,根据一个字段分组 ,又想得到另一个字段的最大或者最小。如何解决。
- 栈和队列(8)-- 最大值减去最小值小于或者等于num的子数组
- 使用R语言得到向量中所有的最大值或者最小值的下标
- DataPicker设置时间范围 最大时间和最小时间
- sql 如何按时间排序 分组 并且取每组时间最大或最小的一条数据
- UVA 10714-Ants(求花费的最大最小时间)
- MSSQL多列取最大或者最小值
- 有n枚硬币按照0到n-1对它们进行编号,其中编号为i的硬币面额为vi,两个人轮流从剩下硬币中取出一枚硬币归自己所有,但每次取硬币的时候只能取剩下的硬币中编号最小的硬币或者编号最大的硬币,在两个都采用最
- 队列实现插入,弹出,找到最大值和最小值的操作
- Java 8 获取某天最大(23:59:59)最小(00:00:00)时间
- 求图像矩阵的最大像素或者最小像素
- 解决新版本jedate时间插件最小最大时间的选择问题
- 同时找出数组的最大值和最小值,要求时间复杂度为o(n)
- O(1)时间复杂度实现入栈、出栈、获得栈中最小元素、获得栈中最大元素
- hdu5289RMQ求区间最大最小值和单调队列维护区间最大最小值