我试图了解根据给定的约束来解决这个问题的最佳方法。我们有一个数字矩阵,每行都有一个排序。我们的结果应该按排序顺序列出所有这些元素。
示例:
Input:
20 40 80
5 60 90
45 50 55
output:
5 20 40 45 50 55 60 80 90
约束:您一次只能容纳1行
可能的解决方案:
1)使用数组,将所有元素放在数组中并对它们进行排序 - > o(n)数组空间和o(n log n)排序时间。但是这使用了额外的内存,因此约束实际上没有得到满足。
2)使用优先级队列。将所有元素放在优先级队列中并删除以按排序顺序获取元素。这再次使用o(n)空间,但我们有更好的时间复杂度,即o(log n)
我无法理解我们如何用给定的约束来解决它。有人可以告诉我,如果我遗失了什么。使用给定的约束来解决它看起来很困难。
答案 0 :(得分:3)
使用优先级队列。此队列的大小应该是您拥有的行的大小。 然后,首先从每行插入第一个元素。 其次,从优先级队列中检索最小值,然后从刚检索到的元素来自同一行插入一个新元素。 第三,继续这样做,你得到你的结果。
但确实有一点需要注意。您的约束是保留空间与列的大小。在这里我使用行大小的空间。但我认为这是公平的。
考虑一下,如果你有2列和1M行,使用大小为2的数组将无济于事。