Étant donné un tableau de nombres, découvrez si 3 d'entre eux totalisent 0
Donné un tableau de nombres, savoir si 3 d'entre eux ajouter jusqu'à 0.
Le faire en N^2, comment pourrait-on faire cela?
source d'informationauteur | 2009-08-16
Vous devez vous connecter pour publier un commentaire.
O(n^2) solution sans les tables de hachage (parce que l'utilisation des tables de hachage est de la triche :P). Voici le pseudo-code:
Essentiellement à l'aide d'un tableau trié, pour chaque numéro (cible) dans un tableau, vous utilisez deux pointeurs, l'un à partir de l'avant et de l'arrière de la table, vérifier si la somme des éléments pointés par les pointeurs >, < ou == à la cible, et à l'avance les pointeurs en conséquence ou retourne true si la cible est trouvée.
Pas de crédit ou de quoi que ce soit, mais voici ma version de python de Charles Ma solution. Très cool.
Beaucoup plus tard:
mettre le négatif de chaque nombre dans une table de hachage ou une autre constante de temps de recherche de la structure de données. (n)
boucle à travers le tableau d'obtenir chaque ensemble de deux nombres (n^2), et de voir si leur somme est dans la table de hachage.
Ne cherche pas à vanter mes compétences en programmation ou ajouter redondant de trucs ici.
Voulais juste fournir les débutants avec une implémentation en C++.
Mise en œuvre, selon le pseudo-code fourni par Charles Ma. J'espère que les commentaires de l'aide.
Première trier le tableau, puis pour chaque nombre négatif (A) dans le tableau, trouver deux éléments dans le tableau en ajoutant jusqu'à -A. Trouver 2 éléments dans un tableau trié qui s'ajoutent à un nombre donné prend O(n) le temps, de sorte que l'ensemble du temps de la complexité est O(n^2).
C'est mon approche de l'utilisation de Swift 3 en N^2 log N...
Première étape, sorte de tableau
deuxièmement, mettre en œuvre une méthode de recherche binaire qui renvoie un index comme si...
Enfin, de mettre en œuvre une méthode qui conserve une trace de chaque fois qu'un ensemble de "triplets" somme 0...
imprime--- count: 7