Просто сохраните HashSet<T>
Dictionary<T,int>
и сохраняйте количество своих предметов таким образом - когда вы ставите в очередь элемент в очереди, вы увеличиваете количество для этого элемента (или добавляете его в словарь, еслипока нет) - вы можете просто проверить, используя dictionary.ContainsKey()
перед добавлением нового элемента, чтобы увидеть, был ли элемент уже добавлен, или получить счетчик для элемента (> = 2 в этом случае после вставки)- это, конечно, требует, чтобы элемент имел равенство, определенное должным образом.
Аналогичным образом вам придется уменьшить количество элементов в словаре, когда вы удаляете элемент из очереди, и удалить его, как только число достигнет нуля..
Этот подход обменивает дополнительную стоимость памяти на время поиска O (1).