2015-11-25 140 views
-3

我想從對象數組(某些自定義類)中獲取頂部K元素。我爲我的班級定義了一個比較器,可以正常工作。陣列的大小非常非常大。由於我只需要最高K元素,因此我計劃使用大小爲K的優先隊列來保持我的空間複雜度爲常數O(k)。當隊列已滿時在優先級隊列(Java)中插入一個元素

我使用了構造函數PriorityQueue(int initialCapacity,Comparator comparator)。

當我將優先級隊列的大小保持爲K時,當我嘗試刪除K個元素時,它給了我一個錯誤;可能是因爲一些大小的限制。但是,如果我使K + 1的大小,它工作正常。總是。

我想了解PriorityQueue的容量屬性如何工作。它是無界的嗎?如果是的話,初始化隊列容量有什麼用處。

+2

「當我嘗試刪除K元素時,它給了我一個數組」。你的意思是「它給我一個*錯誤* ...」?如果是這樣,*什麼*錯誤? – EJP

+0

我重複一遍。 **什麼**錯誤? – EJP

+0

@EJP:其實我看不到錯誤。這是一個黑客等級問題,如果我保持K的大小,測試用例就會失敗。它通過K + 1。 –

回答

0

我想了解PriorityQueue的容量屬性如何工作。它是無界的嗎?

Javadoc

基於優先級堆無界優先級隊列。 ...優先級隊列是無界的,但具有控制用於存儲隊列中元素的數組大小的內部容量。它總是至少與隊列大小一樣大。隨着元素被添加到優先級隊列中,其容量會自動增加。

您寫道:

當我保持優先級隊列爲K的大小,它給了我一個錯誤[我校]當我嘗試刪除K中的元素;可能是因爲一些大小的限制。但是,如果我使K + 1的大小,它工作正常。總是

無法重現。