Vergleiche im Array



  • *nochmal meld* :>

    Wie realisiert man das Zählen des gleichen Inhaltes in einem Array?
    Wenn ich ein Int-Array habe:

    int test[5] = 1,2,2,3,4;

    Soll ausgegeben werden: Es treten '2' gleiche Felder auf.



  • Wenn das Array wie in deinem Beispiel sortiert ist, ist's wohl sehr einfach... Wenn's unsortiert ist, sortierst du's halt und dann ist es wieder einfach 😃

    Bei sortiertem Array:

    Für alle Einträge mache
        cur := aktueller_eintrag
        count := 0
        Solange aktueller_eintrag == cur
           count := count + 1
           aktueller_eintrag = nächster_eintrag
        Gebe aus: [count] " Anzahlen"
    

    Und du musst dir überlegen, was z.B. hierbei ausgegeben werden soll: {1,1,1,1,2,2,3,5,777}.



  • oh cool, ^^

    nach da sortier ich dat ma flink 8P merci



  • int myArray[6] = { 5, 3, 5, 1, 1, 4 };
    	int myArrayLen = 6;
    
    	// wert, anzahl
    	std::map<int, int> statistics;
    	for(int i = 0; i < myArrayLen; ++i)
    	{
    		int key = myArray[i];
    		++statistics[key];
    	}
    


  • @ badestrand, dann soll er sagen *grübel* es gibt halt 3 Zahlen die gleich oft vorkommen... oder so^^

    momentan endet das in einer Endloschleife:

    for(int i = 25; i > 0; i--)
    		if(count[i] != 0)
    			cout << setw(3) << count[i];
    	for(int i = 0; i < 25; i--)
    	{
    		int pick = count[i];
    		int xcount = 0;
    		while (count[i] == pick)
    		{
    			xcount++;
    			pick = count[i+1];
    		}
           cout << count << endl;
    	}
    


  • dein zweiter schleifenzähler zählt ins minus



  • life_drake schrieb:

    dein zweiter schleifenzähler zählt ins minus

    Und die innere Schleife überhaupt nicht.. Aber simon.gysi hat Recht, mit einer map ist's eine Ecke einfacher (obwohl es manuell eine bessere Übung für dich ist) 🙂



  • std::map ist eine Lösung, std::sort und dann durchzählen wäre die 2. die mir einfällt.
    Beide sollten in O(N log N) laufen, aber die std::sort Variante wird ziemlich sicher linear schneller sein.


Anmelden zum Antworten