Как узнать, содержит ли очередь последний элемент в другой позиции? - PullRequest
0 голосов
/ 16 февраля 2012

Давайте иметь очередь и элемент, который был помещен в очередь последним. Каков наиболее эффективный способ выяснить, находится ли элемент (нет) на другой позиции в очереди?

Элемент можно запомнить в другую переменную, если это поможет.

Ответы [ 2 ]

4 голосов
/ 16 февраля 2012

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

Аналогичным образом вам придется уменьшить количество элементов в словаре, когда вы удаляете элемент из очереди, и удалить его, как только число достигнет нуля..

Этот подход обменивает дополнительную стоимость памяти на время поиска O (1).

0 голосов
/ 16 февраля 2012

Я наконец нашел это!Я надеюсь, что это поможет кому-то еще.

Лучший сборник для этой задачи - LinkedList

bool findNotLast<T>(T item, LinkedList<T> list) {
    return list.Count>1 && list.Find(item) != list.Last;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...