Как быстро определить, содержит ли список только дубликаты?

Есть несколько связанных вопросов, но я ищу решение конкретно для моего случая. Имеется массив из (обычно) 14 целых чисел. Как можно быстро определить, что каждое целое число встречается ровно два раза (т.е. есть 7 пар)? Диапазон значений - от 1 до 35. Основным аспектом здесь является производительность.

Для справки, это мое текущее решение. Оно было написано, чтобы как можно больше походить на спецификацию и без учета производительности, поэтому я уверен, что его можно значительно улучшить:

var pairs = Array
    .GroupBy (x => x)
    .Where (x => x.Count () == 2)
    .Select (x => x.ToList ())
    .ToList ();
IsSevenPairs = pairs.Count == 7;

Использование Linq необязательно. Мне все равно как, лишь бы быстро :)

Edit: Есть особый случай, когда int встречается 2n раз при n > 1. В этом случае проверка должна провалиться, т.е. должно быть 7 разных пар.

Edit: Result Я протестировал решения Ani и Jon с небольшими изменениями и обнаружил, что во время многократного прогона бенчмарков в целевом приложении пропускная способность Ani примерно в два раза выше, чем у Jon на моей машине (несколько Core 2 Duo на Win7-64). Генерация массива интов уже занимает примерно столько же времени, сколько и соответствующие проверки, так что я доволен результатом. Спасибо всем!

9
задан mafu 15 November 2010 в 16:10
поделиться