Le problème, comme indiqué, semble manquer certaines contraintes qui seraient utiles. Le premier que je voudrais suggérer, chaque entier du tableau devrait être distinct. À tout le moins, la sortie devrait être de paires uniques.
Une autre contrainte qui peut ou ne peut pas s'appliquer à un domaine de problème spécifique est un tableau trié. Cette contrainte, lorsqu'elle est vraie, suggère un algorithme simple. Démarrer 2 pointeurs, à gauche et à droite, leurs extrémités respectives. Si la somme correspond, la sortir, incrémenter à gauche et décrémenter à droite. Si ce n'est pas le cas, décrémentez le pointeur de droite si la somme est trop grande ou augmentez la gauche (trop petite). Continuez à ajuster à gauche et à droite jusqu'à ce qu'ils se croisent quelque part au milieu.
Pour un tableau non trié. Créez une table de hachage, insérez tous les entiers. Parcourez à nouveau le tableau, cette fois-ci, recherchez la valeur dans la table de hachage pour satisfaire la somme requise. Si la fonction de hachage est parfaite (ce qui peut être difficile à réaliser), alors l'exécution attendue est O (n).
Le tableau sera-t-il toujours trié? –
est la somme des paires déjà donné? – Rozuur
@ user281402 - Je ne pense pas, ex {1 2 3 4 6} et il peut y avoir plus de O (n) – JeffO