`
hongjn
  • 浏览: 56085 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

O(1)取栈中最大值的思考

 
阅读更多

 

算法描述:

一个栈stack,具有push和pop操作,其时间复杂度皆为O(1)。

设计算法max操作,求栈中的最大值,该操作的时间复杂度也要求为O(1)。

可以修改栈的存储方式,push,pop的操作,但是要保证O(1)的时间复杂度,空间时间复杂度无要求。

(来源:http://www.iteye.com/topic/1116956 感谢分享)

 

思考:

增加一个最大值栈maxEleStack来存储原始栈stack的最大值。

定义一个变量,例如maxEle来保存当前最大值。

push操作:每次push一个元素进入栈stack的时候,该元素和maxEle比较,维护maxEle是最大元素,同时将maxEle push进最大值栈maxEleStack。

pop操作:从栈stack中pop一个元素出来的时候。最大值栈maxEleStack的顶上元素也同时被remove掉,同时维护maxEle 为最大值,即为已经remove完顶上元素后的maxEleStack中的最顶元素。

max操作,即取最大值,只需要取maxEleStack的顶上元素即可,所以时间复杂度是O(1)。

1
0
分享到:
评论

相关推荐

    作业02-PB15111604-金泽文-思考题1

    6. **内存映射I/O**:在现代操作系统中,I/O设备的地址与内存地址空间映射在一起,使得CPU可以直接对I/O设备进行读写,简化了I/O操作。 7. **中断处理**:中断机制允许CPU在执行正常任务的同时响应外部事件,如键盘...

    解决二叉树最大深度问题的完整Java代码

    这是由于递归栈的最大深度取决于树的高度,对于平衡二叉树而言,这通常是O(log n);但对于高度不平衡的情况,空间复杂度可能达到O(n)。 #### 五、应用场景与扩展思考 这段代码非常适合用于解决涉及到二叉树深度...

    CSP2022总结&题解&实现代码

    所以可以对于每个栈中的数记录两个值:ORi和ANDi。初加入的数,ORi和ANDi都为0。其余每次运算都分类讨论一下合并top和top−1的两个权即可。最后的答案是全式的短路数量,也就是最终数字栈里的那个数的权值。时间...

    基于C++的0-1背包问题

    - **空间复杂度**:主要由递归调用栈占用的空间决定,最坏情况下为O(n)。 #### 六、应用场景 0-1背包问题在实际中有广泛的应用场景,例如资源分配、投资组合优化等。通过对物品的不同属性进行建模,可以灵活应用于...

    100 questions by_july

    - 为了实现O(1)的时间复杂度,可以维护两个栈:一个是常规栈用来存储数据;另一个是辅助栈用来存储当前栈中的最小值。 - 当新元素入栈时,同时更新辅助栈,如果新元素小于或等于辅助栈顶元素,则压入新元素;否则压...

    2020年腾讯面试笔试宝典.pdf

    **基数排序**:稳定排序算法,时间复杂度为O(nk)(其中n是待排序元素数量,k是排序的最大值范围)。 ### 知识点二:Objective-C内存管理中的`autorelease`机制 **`autorelease`**:在Objective-C中,使用`...

    常见:算法面试题21

    需要设计一个数据结构,它同时具有栈的功能以及可以返回栈中最小元素的功能,且所有操作的时间复杂度都为O(1)。可以通过维护一个额外的小顶堆来实现,堆顶元素始终为栈中的最小元素,这样push和pop操作只需调整堆...

    微软等公司数据结构+算法面试第1-100题汇总

    这样,min操作的时间复杂度是O(1)。 3. **子数组最大和**: - 这是Kadane's Algorithm的应用,通过动态规划找到连续子数组的最大和。遍历数组,维护当前子数组的和`curr_sum`和全局最大和`max_sum`,如果`curr_sum...

    百度公司笔试题与解析

    一个进程中可以包含多个线程,它们共享进程的资源,但各自拥有独立的执行栈和程序计数器。 - 线程相比进程更为轻量级,创建和销毁线程的开销较小,因此线程间的切换更快,但每个线程的资源相对较少。 2. **数值...

    数据结构课后习题答案

    7. **堆**:堆是一种特殊的树形数据结构,满足堆性质(父节点的值大于或小于其子节点的值,取决于是最大堆还是最小堆)。堆常用于优先队列的实现。 8. **文件系统**:在操作系统中,文件系统的数据结构设计对磁盘...

    将升序数组转化为平衡二叉搜索树

    - **空间复杂度**:递归栈的最大深度为树的高度,即O(log n),此外还需要存储左右子数组的空间,因此总的空间复杂度为O(n)。 #### 进阶思考 1. **非递归实现**:虽然递归方式简洁明了,但在实际应用中,为了避免...

    数据结构1800例题与答案

    7. **哈希表**:通过哈希函数实现快速查找,具有O(1)的平均查找时间。哈希表用于实现字典和映射等功能,但可能会遇到哈希冲突的问题。 这份资料的1800例题涵盖了这些基本数据结构的创建、操作、查找、排序等各个...

    2007年百度武大招聘题

    // 如果n为奇数,这里只选择了加1,实际情况下应该选择加1和减1中更优的那个 } int main() { unsigned int n; scanf("%u", &n); printf("%d\n", func(n)); return 0; } ``` - **时间复杂度分析**:这个算法的...

    数据结构.专升本.专插本.考试专用

    数据结构是计算机科学中的核心课程...记得在实践中不断思考,理解每种数据结构的适用场景和优缺点,以及如何根据问题特性选择合适的数据结构。这样,不仅能在考试中取得好成绩,更能为未来的学习和工作打下坚实的基础。

    数据结构课上老师讲的所有例题

    栈是后进先出(LIFO)的数据结构,常用于函数调用和表达式求值;队列是先进先出(FIFO)的数据结构,适用于任务调度和消息传递。树是一种非线性数据结构,包括二叉树、平衡树(如AVL树、红黑树)等,它们在查找、...

    杭州电子科技大学数据结构(题目).pdf

    4. **快速排序的平均性能**:虽然快速排序具有很好的平均时间性能,但在最坏情况下它的性能会下降至O(n^2),这取决于分割策略的选择。 5. **数据结构的分类**:从逻辑上可以把数据结构分为线性结构和非线性结构,...

Global site tag (gtag.js) - Google Analytics