Hay varias preguntas relacionadas, pero estoy buscando una solución específica para mi caso. Hay una matriz de (generalmente) 14 enteros. ¿Cómo puedo saber rápidamente si cada int aparece exactamente dos veces (es decir, hay 7 pares)? El rango de valores va de 1 a 35. El aspecto principal aquí es el rendimiento.¿Cómo puedo saber rápidamente si una lista contiene solo duplicados?
Como referencia, esta es mi solución actual. Fue escrito para parecerse a la espec lo más cerca posible y sin que el rendimiento en mente, así que estoy seguro de que se puede mejorar enormemente:
var pairs = Array
.GroupBy (x => x)
.Where (x => x.Count() == 2)
.Select (x => x.ToList())
.ToList();
IsSevenPairs = pairs.Count == 7;
mediante LINQ es opcional. No me importa cómo, siempre que es rápido :)
Editar: No es el caso especial de que un int aparece 2n veces con n> 1. En este caso, el cheque debe fallar , es decir, hay debe ser de 7 pares distintos
Editar: Resultado He probado soluciones Jon de Ani y de con pequeñas modificaciones y se encontró durante la referencia múltiple se ejecuta en la aplicación de destino que Ani s tiene aproximadamente el doble de rendimiento de Jon en mi máquina (algunos Core 2 Duo en Win7-64). Generar la matriz de entradas ya lleva tanto tiempo como las comprobaciones respectivas, por lo que estoy satisfecho con el resultado. ¡Gracias a todos!
¿La matriz de números está bien ordenada? Debería decirnos si hay algo especial con la matriz, que puede ayudar a mejorar la solución. –
Actualmente estoy perfilando las respuestas para decidir quién obtendrá +15. – mafu
@Danny La matriz no está ordenada. No puedo pensar en nada útil aparte de lo que dije hasta ahora. – mafu