2012-02-15 9 views
0

最後に待ち行列に入れられたキューとアイテムを用意しましょう。アイテムがキュー内の別の位置にあるかどうかを調べる最も効率的な方法は何ですか?キューに最後のアイテムが別の位置にあるかどうかを調べるにはどうすればよいですか?

アイテムは、役立つ場合は別の変数に記憶できます。

+2

効率的な定義です。 –

+0

@James Michael Hare:計算時間が短く、できるだけメモリが少ない。 –

+2

@JanTuroň@残念ながら、それらはほとんどの場合2つの反対の目標です)。 –

答えて

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

+0

もちろん、デキュー時にセットから削除したい場合もあります。 –

+0

ああ、yesを - カウントするための 'Dictionary 'がこれに適しています。重複します。その時点では、 'O(1)'ルックアップ時間のために本当に価値があります。それ以外の場合は、@ JaredParが使用している手法を使用するほうがはるかに簡単です.-書籍は使わないでください。 – BrokenGlass

関連する問題