Disons que j'ai les deux tableaux suivants:
int[] a = [1,2,3,4,5]; int[] b = [8,1,3,9,4];
6 Réponses :
Oui, vous avez besoin de deux boucles, et oui, imbriquées.
pseudocode em> il ressemblera à: p> maintenant tout ce dont vous avez besoin est de le traduire en Aussi, pensez à quelle sortie dont vous avez besoin. Si vous avez juste besoin d'un vrai / de faux si java code>. Comme cela ressemble à un devoir ou à un exercice, vous devez le faire par vous-même. P>
a code> et
b code> avez des valeurs communes, vous pouvez alors quitter les boucles dès que vous trouverez le premier match. Si vous devez plutôt compter le nombre d'éléments communs entre les tableaux, vous devrez lancer un compteur dans cet ensemble de boucles imbriquées. Je vous laisserai à vous de comprendre cette partie. P> p>
Vous avez juste besoin de deux personnes imbriquées pour des boucles Qu'est-ce que cela se passe à la première valeur d'A et comparer à chaque valeur de B, puis passez à la valeur suivante de A et répétez . p> p>
Ce que chaque personne sort de Stackoverflow et quelles questions elles choisissent de répondre, c'est à eux. Vous êtes certainement libre de dépenser vos votes comme vous le voyez en forme (c'est ce que les votes sont pour), mais la réponse n'est pas techniquement fausse.
Merci! C'est exactement ce que j'avais, sauf lorsque je comparais des valeurs dans la déclaration IF () que je faisais [i] pour les deux chiffres au lieu de [i] pour l'un et l'autre compteur pour l'autre.
Débutant: Si quelqu'un demande de l'aide, je suis heureux de le donner. Sauf si quelqu'un dit "c'est pour les devoirs", alors franchement, je ne fais pas partie d'un conseil d'éducation, je ne connais pas ni ne me souciais de savoir pourquoi ils veulent savoir et ce n'est pas ma place à poser. Cependant, cependant, le point essentiel est que l'administrateur sait maintenant comment effectuer la tâche - éducation complète et sans frais pour le système éducatif.
Depuis que vous n'avez pas ce tarif de tarif, je vais vous donner l'avantage du doute. Comme vous l'avez dit, vous aurez besoin de deux boucles; boucle foreach code>
int code> in
A [] code> et
foreach code>
int code> in
b [] code>. Ensuite, comparez simplement les deux valeurs de chaque itération, ce qui vous donne le code simple de:
Très probablement OP n'a pas encore eu la possibilité d'ajouter cette étiquette.
@Beginner: Il suffit de regarder votre code, il est à peine différent de la mienne, que ce soit pseudo-code ou non. Tout n'est pas ses devoirs.
Votre code peut être copypassé. Ce i> est le problème. Mien - pas.
Des réponses en double ne sont pas, en eux-mêmes, de mauvaises réponses, tant que leur contenu technique est correct. C'est mon opinion que, si vous ne pensez pas qu'une question mérite une réponse, que vous ne devriez pas répondre à la question et passer à autre chose, plutôt que de baisser les réponses qui donnent des informations correctes.
@Beginner Avez-vous déjà utilisé le code réel d'Internet comme outil d'apprentissage? J'ai. Vous supposez des mauvaises intentions sans avoir besoin.
@Bryan Oui, il sera utile pour les autres personnes qui visitent ce site ultérieurement pour étudier le code, mais ce n'est en aucun cas utile pour l'OP, à qui cette réponse doit servir en premier lieu.
@Beginner: Comment est-ce exactement inutile à l'OP? Qu'est-ce qu'ils ont mis dans des livres de programmation, des échantillons de code? L'extrait est expliqué et ne dispose que de 3 lignes principales et démontre une boucle foreach code> par opposition à un
pour code> boucle qui utilise un accès aléatoire pour itérer les matrices. Sauf si ceci est étiqueté comme devoir les devoirs, il n'est en aucun cas inutile. Cela ne me dérange pas du tout des votes, mais je ne vois rien de mal avec la réponse. Les mêmes choses vont pour les autres réponses que vous avez voté.
@Beginner Je comprends votre préoccupation. Mais essayons de bien assumer une bonne foi sur tout le monde.
Selon les données (sa taille, si chaque valeur est unique, etc.) et de ce que vous essayez d'en obtenir (c'est-à-dire que chaque élément d'A est en B, ou également son indice en B), il Peut être bénéfique de faire un peu de frais généraux avant de faire la viande. Par exemple, si vous triez les deux tableaux (ce que vous aurez besoin de faire une seule fois), vous pouvez commencer la boucle interne où vous l'avez arrêtée en dernier (puisque vous savez que vous recherchez un numéro> = celui que vous avez recherché Enfin, il faut donc être à cet indice ou plus grand), et vous pouvez également arrêter la boucle intérieure plus tôt (puisque vous savez que si vous recherchez X et que vous ne l'avez pas trouvé avant de voir une valeur> x, puis X n'est pas là). Une autre approche serait de charger les deux valeurs dans un ensemble, que vous pouvez maintenant rechercher efficacement. P>
Ces solutions prennent toutes l'heure de O (n ^ 2). Vous devez exploiter une solution de hashmap / hashset pour une solution de manière sensiblement plus rapide O (n):
Ils prennent du temps constant. Pour les grandes valeurs de N, les coûts de recherche seraient négligeables. Vous le proposez est O (n + nk), où k est un peu coûteux? De toute façon, cette solution amortit à O (n).
//O(n log(n)), Linear Space Complexity void findDuplicates(int[] x, int[] y){ Arrays.sort(x); Arrays.sort(y); int i = 0,j = 0; while (i < x.length && j < y.length) { if(x[i] == y[j]){ System.out.println(x[i]); i++; j++; }else if (x[i] < y[j]) i++; else j++; } }
Sent comme des devoirs pour moi. Qu'avez-vous si loin?
Quelle est la sortie que vous essayez de produire?