Donc tous les éléments distincts, positifs et inférieurs à n. Tu peux faire ça: tu prends les éléments, tu les tries (coût en n.ln(n)) et vérifies qu’ils sont entre 1 et n.
Avec SQL ça doit se faire facilement, tu assures le tri en construisant petit à petit une table avec un index (ce qui assurera l’unicité)
Sinon, tu fais un tableau de booléens et tu parcours tes tables en mettant à «true» le ième élément du tableau pour la lecture de i. Ça te donne une complexité en n au lieu de n.ln(n).
si tu fais un de toutes les valeurs de id1 toutes les valeurs de id2, ordre croissant
tu créé une table avec deux champs, un champ INT <auto increment - primary key>, et un champ INT pour y mettre tes valeurs
tu réinitialise la table en question, afin que le auto incrément recommence à la plus petite valeur issue de ton select (car je ne sais pas si ça sera toujours 1)
tu insère les valeurs de ton select dans la table en question, et surtout dans l’ordre.
normalement, sur chaque ligne, les deux colonnes doivent être identiques.
Eh bien, tu as n lignes, tu fais un tablea de longueur 2N initialisé à false, puis pour toutes valeurs sur chaque ligne:
Pour chaque i
Si i<= 0 ou i > 2*n alors valeur hors cadre
Si V.(i) alors 2 valeurs identiques
Sinon V.(i)<-True
Comme tu as entré 2n valeurs distinctes entre 1 et 2n, elles y sont toutes.
Essaye de prendre 10 entiers distincts compris entre 1 et 10 qui ne soient pas {1,2,3,4,5,6,7,8,9,10}… Tu ne peux pas, donc si ils sont 10, différents 2à2 et compris entre 1 et 10, ils sont 1,2,3,4,5,6,7,8,9,10