2012-02-15 50 views
0

讓我們有一個隊列和一個最後入隊的項目。找出項目是否在隊列中另一個位置的最有效方法是什麼?如何找出隊列是否包含其他位置的最後一項?

該項目可以記住到另一個變量,如果它有幫助。

+2

定義快捷。 – 2012-02-15 21:47:23

+0

@James Michael Hare:計算時間短,內存儘可能少。 – 2012-02-15 21:49:00

+2

@JanTuroň不幸的是,這些在大多數情況下是兩個相反的目標;) – 2012-02-15 21:49:41

回答

0

我終於找到了!我希望它也能幫助別人。

這項任務更好地收集爲LinkedList

bool findNotLast<T>(T item, LinkedList<T> list) { 
    return list.Count>1 && list.Find(item) != list.Last; 
} 
4

只要保持一個 HashSet<T> Dictionary<T,int>,並保持你的項目的數量這樣 - 當你排隊隊列中的一個項目,你增加該項目的數量(或將其添加到字典中,如果不存在尚未) - 你可以只需使用dictionary.ContainsKey()之前添加新項目以查看項目是否已添加,或檢索項目的計數(在插入後在該情況下>> = 2),這當然要求項目具有正確定義的相等性。

同樣,當您從隊列中取出一個項目時,您將不得不減少字典中項目的計數,並在計數達到零後將其刪除。

此方法爲O(1)查找時間換取額外的內存成本。

+0

+1基本上和我的一樣。儘管你擊敗了我。 – jason 2012-02-15 21:53:35

+0

確實,當你出院的時候,你會想從列表中刪除... – 2012-02-15 21:54:30

+0

啊是的 - 一個'字典'計數將更適合這個,因爲你將不得不計數以跟蹤重複。在這一點上,它真的必須值得它'O(1)'查找時間,否則將是很多,只是使用@JaredPar正在使用的方法更容易 - 沒有涉及簿記 – BrokenGlass 2012-02-15 21:57:11

相關問題