我想在O(LOGN)的時間與優先級隊列功能的數據結構,還能夠刪除一定不是在O(LOGN)時間的頭一個特定的元素。我聽說java中的TreeSet做了它,但不允許重複,我如何解決這個問題?如何在Java中使用允許重複的TreeSet?
-3
A
回答
2
使用TreeMap它允許插入在log n
時間和刪除log n
時間。您可以在那裏存儲TreeMap<Integer,Integer>
其中密鑰存儲元素的值,值存儲元素的頻率。
如果你需要做的只是Insert
和Delete
操作,使用Java的Priority Queue。它也允許在log n
時間插入和刪除在log n
時間,因爲它使用Heaps
來存儲數據。
通過執行TreeMap
的功能,您可以執行Insertion
,Deletion
。
TreeMap<Integer,Integer> map=new TreeMap<Integer,Integer>();
插入:
public boolean insert(int value) throws Exception
{
try
{
if(!map.containsKey(value))
map.put(value,0);
map.put(value,map.get(value)+1);
return true;
}
catch(Exception e)
{
e.printStackTrace();
return false;
}
}
頭隊列(PEEK):
public int getHead()
{
if(map.firstKey()==null)
return null;
return (int)map.firstKey();
}
刪除和檢索頭(輪詢):
public int removeHead()
{
if(getHead()==null)
return null;
int head=getHead();
if(map.get(head)==1)
map.remove(head);
else
map.put(head,map.get(head)-1);
}
1
我沒有足夠的信譽發表評論,所以我會在這裏說這個。我認爲按照here的說明去除優先隊列中的元素是O(N)。
你也許能夠解決這個問題在某些情況下。如果您不打算在刪除對象後添加對象,則可以對priorityqueue進行封裝並保留已刪除元素的散列集。然後,如果您在輪詢時遇到該對象,則將其丟棄。
你也可以使用一個有序列表創建自己的PriorityQueue。然後,您可以使用二進制搜索來查找插入位置或要有效刪除的索引。
相關問題
- 1. 允許重複項的TreeSet或TreeMap
- 2. Java中的數據結構是否像TreeSet一樣,但允許重複?
- 3. 允許重複使用options_for_select
- 4. 如何停止允許在Dynamics AX 4.0中使用重複項
- 5. 如何允許在Irony.NET重複
- 6. 如何修復允許重複
- 7. 的NSMutableArray:如何允許重複的值
- 8. HashSet的犯規允許重複,但如何編寫邏輯允許重複
- 9. 在Java中使用TreeSet
- 10. 列表允許重複,但如何編寫邏輯DIS-允許列表重複在Java核心
- 11. Hashset允許重複?
- 12. HashMap允許重複?
- 13. Java HashSet仍然允許重複項
- 14. 哪個Java收集允許重複鍵
- 15. Java:使用TreeSet
- 16. HashSet如何不允許重複?
- 17. 如何在BerkeleyDB中允許StoredMap中的重複項?
- 18. 如何TreeSet的檢查重複
- 19. 如何修復logstash/jruby中的「不允許重複擴展」?
- 20. 如何在Magento中允許重複的SKU
- 21. 如何在asp.net成員資格中允許重複的名稱?
- 22. 如何在ZF2重複接受的數據中允許Doctrine
- 23. 如何在ModelMultipleChoiceField中允許重複的值
- 24. 如何在Access索引中允許重複的空白?
- 25. ng不允許重複重複
- 26. Django - 允許重複的用戶名
- 27. 允許SQL Server 2008中的重複uniqueidentifiers?
- 28. has_and_belongs_to_many允許沒有重複
- 29. mlogit重複'row.names'不允許
- 30. VBA - 允許重複項
例如,你可以添加一個正在運行的ID,以確保您有沒有重複 –
一組的*整點*,Java或其他地方,是它不允許重複。 – chrylis
如果你想插入重複的東西,然後創建一個數據結構並插入它的對象。這樣它允許重複 – bharath