Wie, um Duplikate zu finden, die in einem java-array?
Ich versuche zu zählen, wie viele doppelte Elemente in einem array.
Beispiel:
[0, 2, 0] would return 2, [0, 0, 0] would return 3, [0, 1, 2] = 0
Bisher habe ich es funktioniert, wenn alle drei Elemente gleich sind, aber ich bin mir nicht sicher, warum es ist die Rückkehr eines weniger als das, was es sollte für 2 Produkte sind die gleichen.
int equal = 0;
for(int i = 0; i < recent.length; i++) {
for(int j = i; j < recent.length; j++) {
if(i != j && recent[i].equals(recent[j])) {
equal++;
}
}
}
- Müssen Sie überdenken das problem.
- Insbesondere sollten Sie überdenken Sie Ihre definition des Problems. Was genau versuchen Sie zu zählen - wie viele duplizierte Elemente es gibt, oder wie viele Paare von gleichen Elementen gibt es?
- Investieren Sie etwas Zeit in das Lesen der Dokumentation für HashMap.
- Was würde [0, 2, 0, 2, 0] zurück - nur eine einzige Zahl? Was würde es sein?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Algorithmus ist fehlerhaft in der folgenden Art und Weise: für jedes element im array, die Sie Blick auf all die Elemente, nachdem das element aus und wenn Sie zufällig gleich sein, erhöhen Sie den Zähler. Allerdings, wenn du 3 gleiche Elemente zählen Sie die letzten zweimal beim ausführen von internen Schleife zum ersten und zum zweiten element. Außerdem werden Sie nie zählen Sie das erste element.
Damit es funktioniert, durch Zufall für
[0, 0, 0]
funktioniert aber nicht für andere Eingänge.Ich denke, dass mit verschachtelten Schleifen ist ziemlich ineffizient. Sie sollten in der Lage sein, es zu tun in o(n) anstatt o(n^2).
Wenn du mal deins gegen folgende...
Ich glaube, Sie finden die oben ist viel schneller, auch wenn man bedenkt das schreckliche Ineffizienz des autoboxing und-Objekt erstellen.
Code, den Sie gab, zählt äquivalenzen, so fügt es ein jedes mal, wenn ein element ist gleich einem anderen element ist.
Es klingt wie das, was Sie wollen, ist die Anzahl von doppelten Elementen, das ist das gleiche wie (Länge, Anzahl der Elemente, die keine Duplikate). Ich nenne das letztere "uniqueItems".
Ich würde empfehlen, die folgenden:
Den code unten funktioniert einwandfrei zu finden, die Duplikate
Sind Sie zählen die Anzahl der Paare von Indizes, die die gleichen Werte. Was Sie behaupten zu wollen, ist die Gesamtgröße aller Gruppen gleicher Elemente, die mehr als ein element in Ihnen.
Ich würde eine Karte oder ähnliches zum zählen der Gesamtzahl der Erscheinungen von einem vorgegebenen Wert. Am Ende der Iteration über die Schlüssel-Werte hinzufügen, die Anzahl der Auftritte für jede Taste, die mehr als eine Erscheinung.
Ausgabe:
{5=4, 1=3, 4=3, 2=2}
Haben wir ein array mit 11 zahlen, Die Logik ist, eine map zu erstellen mit diesen nicht. in dem SCHLÜSSEL der map werden die tatsächliche Anzahl, die eingegeben werden müssen durch die Benutzer und keine. der occournce, dass tatsächliche keine. wäre der Wert dieses SCHLÜSSELS. Hier containsKey () - Methode prüft, ob die Karte enthalten, dass der Schlüssel bereits und Rückgabe boolescher Wert, der true oder false als angewendet.Wenn es nicht enthalten, dann fügen Sie die Schlüssel in die Karte und der entsprechende Wert sollte 1 sein, sonst key würde bereits enthalten sein, in anzeigen so rufen Sie den Wert des Schlüssel mit get() und erhöhen Sie um 1. Schließlich drucken die Karte.
AUSGABE:--
Nummer 2 Aufgetreten ist 2 mal
Nummer 4 Occours 3 mal
Nummer 5 Aufgetreten, 1 mal,
Nummer 6 Aufgetreten ist 2 mal
Nummer 7 Aufgetreten, 1 mal,
Nummer 8 Aufgetreten ist 2 mal