Есть несколько связанных вопросов, но я ищу решение конкретно для моего случая. Имеется массив из (обычно) 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). Генерация массива интов уже занимает примерно столько же времени, сколько и соответствующие проверки, так что я доволен результатом. Спасибо всем!