编程之美3.7队列中取最大值操作问题(新解法,空间复杂度比原解法低)

题目就不再叙述了,前几种解法书上都有,我这暂且叫解法四:

思路如下:

假设有入队元素个数最多为n个。

1.首先开一个大小为n的数组data[n]来保存原始数据,以及大小为n的数组MAXARRAY[n]来保存最大值,。

2.假设入队的数为124375

3. 1入队列,则两个数组中的情况为:

data:1

MAXARRAY:1

4. 2 入队列,则两个数组中的情况为:

data:1,2

MAXARRAY:2,2

5. 4入队列:

data:1,2, 4

MAXARRAY:4,4,4

6. 3入队列:

data:1,2,4,3

MAXARRAY:4,4,4,3

7. 7入队列:

data:1,2,4,3,7

MAXARRAY:7,7,7,7,7

8.  5入队列:

data:1,2,4,3,7,5

MAXARRAY:7,7,7,7,7,5

9.出队列

在出队列时从data数组和MAXARRAY数组中同时弹出第一个元素。

10. 获得最大值

获得最大值时,直接取出MAXARRAY的第一个元素。

11. 时间复杂度和空间复杂度分析

   时间复杂度:元素入队列时为:O(n),原题目中为O(1);出队列以及获得最大元素操作:O(1),原题目中为O(n)

   空间复杂度:O(n),原题目为O(2 * n)(虽然常数可以忽略,但是实际空间消耗量为我的方法的2倍);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值