说,我有一个连续输入未知大小的整数。在任何时刻,在接收到k个元素作为输入时,我希望有一个大小为k的堆。如果不预先初始化一些长度的数组,怎么能实现呢?
答案 0 :(得分:1)
使用基于二叉树的堆。您无需了解大小限制。
http://interactivepython.org/runestone/static/pythonds/Trees/BinaryHeapImplementation.html
即使使用基于数组的实现,当容量不足时,您也可以使用分配大小技巧的加倍。它将具有相同的时间复杂性。
答案 1 :(得分:0)
java.util.PriorityQueue
的基础数据结构是一堆。我假设通过提到堆,你打算在数据上有订购功能。
使用默认构造函数初始化PriorityQueue
时,它会创建一个PriorityQueue
,其默认初始容量(11)根据其自然顺序对其元素进行排序。如果您定义自定义Comparator
,它将根据您的约束进行排序。
其他动态大小的数据结构(如ArrayList
)不会提供排序顺序的功能,除非您对它们进行排序。
我认为你想要解决类似于运行流的第k个最小/最大元素的东西。如果是,您可以使用默认构造函数初始化PriorityQueue
,并在推送每个元素时检查其当前大小是否为k
。如果它的当前大小为k
,请根据约束用新元素替换top元素。
最后,如果您只需要动态大小而不需要像堆这样的排序,请使用ArrayList
。