博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程之美---队列中取最大值操作问题
阅读量:5025 次
发布时间:2019-06-12

本文共 1839 字,大约阅读时间需要 6 分钟。

如何快速获取队列中的最大值?

最简单的办法,用一个for循环遍历,复杂度为o(n).

解法二:用大顶堆来实现,复杂度为哦o(1),但是入队和出队复杂度变为o(logN),堆中的每一个元素还得有个指针指向它的后继元素。

解法三:可以使用两个栈来模拟队列,从右边的栈进入元素相当于入队,出队时,只有当左边的栈为空时,才把右边栈的元素全部出栈到左边的栈。

1 class stack 2 { 3 public: 4     stack() 5     { 6         stackTop = -1; 7         maxItemIndex = -1; 8     }  9     void Push(int x)10     {11         stackTop ++;12         if(stackTop >= MAXN) 13             ;14         else15         {16             items[stackTop]=x;17             if(x>Max())18             {19                 nextMaxItem[stackTop] = maxItemIndex;20                 maxItemIndex = stackTop;21             }22             else nextMaxItem[stackTop] = -1;23         }24     } 25     int Pop()26     {27         int x;28         if(stackTop < 0) return -1;29         else30         {31             x = items[stackTop];32             if(stackTop == maxItemIndex)33             {34                 maxItemIndex = nextMaxItem[stackTop];35             }36             stackTop--;37         }38         return x;39     } 40     int Max()41     {42         if(maxItemIndex >= 0) return items[maxItemIndex];43         else return -1;44     } 45     bool empty()46     {47         return stackTop == -1;48     }  49 private:50     int items[MAXN];51     int stackTop;52     int nextMaxItem[MAXN];53     int maxItemIndex;54 };55 class Queue56 {57 public:58     void Enqueue(int x)59     {60         B.Push(x);61     } 62     int Dequeue()63     {64         if(A.empty())65         {66             while(!B.empty())67             {68                 A.Push(B.Pop());69             }70         }71         return A.Pop();72     } 73     int Max()74     {75         if(A.Max() >= B.Max()) return A.Max();76         else return B.Max();77     } 78     private:79     stack A;80     stack B;81 };
View Code

 

转载于:https://www.cnblogs.com/wen-ge/p/4161099.html

你可能感兴趣的文章
【转】Apache Jmeter发送post请求
查看>>
Nginx 基本 安装..
查看>>
【凸优化】保留凸性的几个方式(交集、仿射变换、投影、线性分式变换)
查看>>
NYOJ-613//HDU-1176-免费馅饼,数字三角形的兄弟~~
查看>>
TFS --- GrantBackup Plan Permissions Error
查看>>
傅里叶级数与积分方程
查看>>
软工作业3:用户体验分析——以“南通大学教务管理系统微信公众号”为例
查看>>
Css:背景色透明,内容不透明之终极方法!兼容所有浏览器
查看>>
我们前端跟后端是怎么合作的
查看>>
mysql存储过程
查看>>
洛谷P2556 [AHOI2002] 黑白图像压缩 [模拟]
查看>>
letecode [136] - Single Number
查看>>
linux下设置固定IP的方法
查看>>
VMware虚拟机下Linux系统的全屏显示
查看>>
net core体系-web应用程序-4asp.net core2.0 项目实战(任务管理系统)-2项目搭建
查看>>
高效的jQuery
查看>>
ubuntu 16.04 (软件应用)-输入法
查看>>
windos7修复引导扇区
查看>>
Leetcode总结之Backtracking
查看>>
Android开发学习之路-图片颜色获取器开发(1)
查看>>