Il y a plusieurs questions connexes, mais je cherche une solution spécifique à mon cas. Il y a un tableau de (généralement) 14 entiers. Comment puis-je savoir rapidement si chaque int apparaît exactement deux fois (c'est-à-dire qu'il y a 7 paires)? La plage de valeurs va de 1 à 35. L'aspect principal ici est la performance.Comment savoir rapidement si une liste contient uniquement des doublons?
Pour référence, ceci est ma solution actuelle. Il a été écrit pour ressembler à la spécification aussi près que possible et sans la performance à l'esprit, donc je suis certain est peut améliorer considérablement:
var pairs = Array
.GroupBy (x => x)
.Where (x => x.Count() == 2)
.Select (x => x.ToList())
.ToList();
IsSevenPairs = pairs.Count == 7;
LINQ est facultative. Je ne me soucie pas comment, tant qu'il est rapide :)
Edit: Il y a le cas particulier qu'un int apparaît 2n fois avec n> 1. Dans ce cas, le chèque doit échec, à savoir là devrait être 7 paires distinctes.
Edit: Résultat J'ai testé les solutions de Ani et Jon avec de petites modifications et a trouvé au cours de référence multiples fonctionne dans l'application cible qui a environ deux fois le débit de Jon Ani sur ma machine (certains Core 2 Duo sur Win7-64). Générer le tableau d'ints prend déjà environ aussi longtemps que les vérifications respectives, donc je suis content du résultat. Merci a tous!
Le tableau de nombres est-il bien trié? Vous devriez nous dire s'il y a quelque chose de spécial dans le tableau, ce qui peut aider à améliorer la solution. –
Je suis actuellement en train de profiler les réponses pour décider qui aura +15. – mafu
@Danny Le tableau n'est pas trié. Je ne peux pas penser à quelque chose d'utile en dehors de ce que j'ai déclaré jusqu'à présent. – mafu