维护O(1)时间查找最大元素的栈
来源:互联网 发布:大学刷题软件 编辑:程序博客网 时间:2024/06/02 03:40
问题描述:一个栈stack,具有push和pop操作,其时间复杂度皆为O(1)。设计算法max操作,求栈中的最大值,该操作的时间复杂度也要求为O(1)。可修改栈的存储方式,push,pop的操作,但是要保证O(1)的时间复杂度,空间时间复杂度无要求。
创建一个类,类里有两个栈,一个栈S1维持正常的push、pop操作,另一个S2保存当前的最大值。
其实我觉得理解好题目是非常重要的,求最大值,想来想去无论怎么样时间复杂度也得为O(n)吧,但是题目并不是这个意思,而是在已有的操作上,进行一步操作,就可以得到最大值。那么这就好做了。
S1:1 2 5 4 3 2 9
S2:5 9
进栈的元素时候如果为比S2的栈顶要大,则为最大值,同时push S1 and S2。否则,只进栈S1(S1为原始栈)。
同样,出栈的时候,直接检查S2和S1的是否相同,是的话,直接出栈,S2的栈顶必为最大值。这道题目可以改为最小值,只需要把判断符号改一下即可。
见下面代码:
strcut find_max{stack<int> s1;stack<int> s2;};find_max s;void redefine_push(int k){if(!s.s1.empty()){if(k>s.s2.push())s.s1.push();s.s2.push();}else{s.s1.push();s.s2.push();}}void redefine_pop(){if(!s.s1.empty()){if(s.s1.top()==s.s2.top())s.s2.pop();s.s1.pop();}}int max_stack(){if(!s.s1.empty())return s.s2.redfine_pop();}
0 0
- 维护O(1)时间查找最大元素的栈
- 设计一个栈,提供一个函数能够找出栈内最大的元素,时间复杂度为O(1)
- 时间复杂度为o(N)查找1至N-1构成的a[N]重复元素
- 时间复杂度为o(N)查找1至N-1构成的a[N]重复元素
- 时间复杂度为o(N)查找1至N-1构成的a[N]重复元素
- 实现一个栈,获取其中最大元素,获取时间复杂度为O(1)
- O(1)时间求出栈中最小的元素
- O(1)时间复杂度求栈的最小元素
- O(1)时间复杂度求栈的最小元素
- O(1)时间复杂度实现入栈、出栈、获得栈中最小元素、获得栈中最大元素
- 在旋转后的有序数组中查找元素,要求O(logn)的时间复杂度
- 在旋转后的有序数组中查找元素,要求O(logn)的时间复杂度
- 倒置数组元素查找--时间复杂度O(lgn)
- 如何用O(1)的时间复杂度求栈中最小元素
- 如何用O(1)的时间复杂度求栈中最小元素
- O(1)时间求出栈内元素最小值
- O(1)时间求出栈内元素最小值
- 栈在o(1)时间获取最小元素
- PHP Web木马扫描器增强版
- 牛P的经验、经历、感受分享
- 实现屏幕截屏
- codeforces 160/B 字符串水题
- python学习教程(十三)python实现单例模式
- 维护O(1)时间查找最大元素的栈
- apache日志分析简介
- JQuery 实现ajax 实例
- mysql数据库
- 扫描目录下的php文件,是否含有木马特征
- 如何做到每天写代码?
- 设计模式之模版方法模式
- 第6周总结
- 【树】线索二叉树概念