【发布时间】:2017-08-30 14:16:22
【问题描述】:
我有一个包含以下元素的队列:
1 None 2 3 None 4 5 6 7 None 8 9 10 11 12 13 14 15
这里 None 做分隔符的工作,仅此而已。
现在我想像这样打印输出:
8 9 10 11 12 13 14 15
4 5 6 7
2 3
1
我可以打印这个输出:
15 14 13 12 11 10 9 8
7 6 5 4
3 2
1
通过从右侧遍历队列。
这是代码:
length = len(sequenced_que)
for i in range(0, length):
temp = sequenced_que.pop()
if temp is None:
print()
else:
print(temp.data, end=" ")
8 9 10 11 12 13 14 15
4 5 6 7
2 3
1
上述期望的输出可以通过使用临时堆栈来实现。我可以将元素推入堆栈,直到遇到 None 然后开始弹出它们。
但这需要 O(n) 额外空间。
我只需要一个高效的算法而不是使用临时堆栈。您可以使用队列和列表的所有属性。
谢谢你:)
【问题讨论】:
-
您目前的方法有什么问题?是不是因为你打电话太频繁了
print()?临时堆栈有什么令人反感的?您说它“需要 O(n) 额外空间”,但只有当您的队列不包含None分隔符时才会这样。如果您可以指望数据总是被None分隔符分块,它可能会使用比 O(n) 少得多的额外空间。您确定内存消耗是一个限制因素吗? -
蟒蛇
queue没有方法.pop()。您使用的是哪种队列? -
我使用的是双端队列,因为它允许在两端添加和删除
-
@StevenRumbalski 在我的情况下内存消耗不是限制因素。毕竟我正在练习算法。我正在尝试打印树的反向级别顺序。我书中给出的解决方案是使用队列和单个堆栈。我尝试了自己的方法,但我需要这个临时堆栈。所以我只是想如果没有那个临时堆栈是否可以解决这个问题。
-
下次问得更清楚。您对堆栈方法的内存消耗提出了异议,并标记了您的问题数据结构和算法。您将数据结构称为
queue,但未指定您使用的是deque。
标签: python algorithm data-structures stack queue