Finden Sie einzigartige zahlen im array
Gut, habe ich feststellen müssen, wie viele verschiedene zahlen in einem array.
Beispielsweise, wenn array ist: 1 9 4 5 8 3 1 3 5
Sollte die Ausgabe 6, weil 1,9,4,5,8,3 sind einzigartig und 1,3,5 wiederholen (nicht eindeutig).
So, hier ist mein code bisher..... funktioniert nicht richtig gedacht.
#include <iostream>
using namespace std;
int main() {
int r = 0, a[50], n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int j = 0; j < n; j++) {
for (int k = 0; k < j; k++) {
if (a[k] != a[j]) r++;
}
}
cout << r << endl;
return 0;
}
Sortieren Sie das array, dann ist es trivial. Versuchen Sie herauszufinden, für sich selbst, wie die Komplexität, die im Vergleich zu der Komplexität Ihrer Lösung.
Dies scheint Hausaufgaben auf mich... aber ja, können Sie eine Sortierreihenfolge für das array verwenden, oder Sie können eine hashtable.
scheint SO, ist ein guter Ort, um last-minute-Hausaufgaben gemacht. format-Frage, Stelle es auf, SO, ???, Antwort bekomme!
Scheint es nicht, wenn man bedenkt, dass fast alle Antworten auf diese Fragen haben Sie entweder einen falschen Algorithmus oder verwenden Sie die standard-Bibliothek für den job - das ist offenbar nicht das, was diese Hausaufgabe ist über ...
Dies ist die beste Logik, die ich jemals gefunden wurde.stackoverflow.com/questions/28320454/...
Dies scheint Hausaufgaben auf mich... aber ja, können Sie eine Sortierreihenfolge für das array verwenden, oder Sie können eine hashtable.
scheint SO, ist ein guter Ort, um last-minute-Hausaufgaben gemacht. format-Frage, Stelle es auf, SO, ???, Antwort bekomme!
Scheint es nicht, wenn man bedenkt, dass fast alle Antworten auf diese Fragen haben Sie entweder einen falschen Algorithmus oder verwenden Sie die standard-Bibliothek für den job - das ist offenbar nicht das, was diese Hausaufgabe ist über ...
Dies ist die beste Logik, die ich jemals gefunden wurde.stackoverflow.com/questions/28320454/...
InformationsquelleAutor user2041143 | 2013-02-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lassen Sie mich an der party 😉
Können Sie auch ein-hash-Tabelle:
Nicht, dass es geht, aber das wird wahrscheinlich die beste Leistung für große arrays.
Wenn die Differenz zwischen dem kleinsten und größten element ist relativ klein, dann kann man sogar noch etwas schneller:
vector<bool>
, die sich über den Bereich zwischen min-und max-element (wenn Sie wusste, dass die array-Elemente zur compile-Zeit, würde ich vorschlagen, diestd::bitset
statt, aber dann könnte man nur alles berechnen, was in der compile-Zeit mit template-meta-Programmierung sowieso).vector<bool>
.true
s in dervector<bool>
.InformationsquelleAutor Branko Dimitrijevic
Einen
std::set
enthält nur eindeutige Elemente bereits.Nein, es ist die Größe eines Arrays
InformationsquelleAutor dreamlax
Wie über dieses?
Sie könnte auch verwendet haben
std::set
😛ja, oder sogar solche, die auf array, dann vergleichen benachbarte Elemente...
Naja, mein problem ist, dass ich nicht studiert Vektoren noch und ich habe, um diese mit Schleifen / arrays nur. Alle helfen mit, dass?
Sie brauchen, um zu Sortieren es zuerst, dann zählen angrenzenden Elemente.
InformationsquelleAutor billz
Da Sie erklärt habe, dass man nicht mit der standard-Bibliothek und müssen mit Schlaufen, lassen Sie uns versuchen, diese Lösung statt.
Ich Drang Sie nicht senden diesen code, da Sie Ihre Hausaufgaben - zumindest nicht, ohne es zu verstehen. Sie werden nur Sie tun sich selbst einen Bärendienst erwiesen, und die Chancen sind, dass Ihre Lehrer wissen, dass Sie nicht schreiben es trotzdem: ich habe einen Schüler vor, und es ist ziemlich offensichtlich, wenn jemand die code-Qualität magisch verbessert.
Sind Sie falsch. Lesen Sie den code erneut aus - und sagen Sie mir, was
n - r
berechnet. Es ist wirklich nicht schwer, um es herauszufinden; Sie können auch ausführen den code, wenn Sie müssen.Ich lese den code wieder, den ich jetzt noch lief es gegen den test-Eingang des OP: mit diesem Eingang gibt es
3
, nicht6
als für das angegebene problem. Es ist, wie ich sagte: dein code zählt zahlen, die nur einmal vorkommen.r
zählt alle Instanzen von zahlen, die immer wieder auftreten - sogar die erste. Der OP wollte eine Zählung des alle verschiedenen zahlen. Die Lösungen, die Verwendung von std::set und std:: list Recht.Oh wow, du hast Recht. Ich bin völlig falsch verstanden, das problem. Werde den code optimieren.
InformationsquelleAutor Nik Bougalis
Ich denke, die Lage für die Erhöhung der Wert von r ist falsch
Allerdings, mein Vorschlag ist mit anspruchsvoller algorithmen (dieser Algorithmus ist O(N^2)).
if (true == flag)
? Letzteres ist besonders beängstigend.Diese Lösung ist nicht wie vorgesehen funktioniert. Kann das jemand überprüfen?
können Sie nicht?
Ich Tat, und es hat nicht funktioniert wie vorgesehen.
Nein, ich meinte, kannst du nicht herausfinden, warum es nicht so funktioniert wie gedacht?
InformationsquelleAutor iampat
diese Arbeit sollte jedoch wahrscheinlich nicht die optimale Lösung.
InformationsquelleAutor cameronjchurch
Können wir verwenden, C++ - STL-Vektor in diesem Programm .
InformationsquelleAutor rashedcs
Bitte trocknen Sie Ihren code ausführen
Sehen Sie in der äußeren for-Schleife für jedes element gezählt, mehr als einen innerhalb der inneren Schleife.lassen Sie uns sagen, die Schleife enthält 1,2,3,4.1.....Elemente trocken laufen, es in der zweiten und Dritten iteration iteration 1 gezählt wird, weil 1 ist 1!=2 sowie 1!=3
Nun die Lösung!!!
InformationsquelleAutor Sourabh