Clasa a IX-a · Frecvență, sume parțiale și ciurul lui EratosteneRead in English

Valorile distincte și frecvențele lor în C++

În engleză: Distinct values and their frequencies

O(n)C++1745 de linii1 exemplu

Ideea

După ce am construit vectorul de frecvență, valorile distincte sunt indicii val cu frecv[val] > 0. Parcurgându-i crescător, le afișăm direct în ordine, fiecare cu frecvența ei, câte una pe linie. Valorile sunt între 0 și 1000.

Descrierea în engleză

Once the frequency array is built, the distinct values are the indices val with frecv[val] > 0. Going through them in increasing order, we print them directly in order, each with its frequency, one per line. The values are between 0 and 1000.

Complexitate
O(n + V), unde V este valoarea maximă posibilă
Clasa
Clasa a IX-a (Grade 9)

Exemple

Exemplul 1

Intrare

8
5 2 5 9 2 5 0 2

Ieșire așteptată

0 1
2 3
5 3
9 1

Codul C++

Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.

valori-distincte-si-frecvente.cpp
/*
 * Titlu: Valorile distincte și frecvențele lor
 * Clasa: 9
 * Capitol: Frecvență, sume parțiale și ciurul lui Eratostene
 * Descriere: După ce am construit vectorul de frecvență, valorile distincte
 *            sunt indicii val cu frecv[val] > 0. Parcurgându-i crescător, le
 *            afișăm direct în ordine, fiecare cu frecvența ei, câte una pe linie.
 *            Valorile sunt între 0 și 1000.
 * Complexitate: O(n + V), unde V este valoarea maximă posibilă
 *
 * Exemplu
 * Intrare:
 * 8
 * 5 2 5 9 2 5 0 2
 * Ieșire:
 * 0 1
 * 2 3
 * 5 3
 * 9 1
 */
#include <iostream>
using namespace std;

const int VMAX = 1000;
int frecv[VMAX + 1];

int main()
{
    int n, x;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> x;
        frecv[x]++;
    }
    for (int val = 0; val <= VMAX; val++)
    {
        if (frecv[val] > 0)
        {
            cout << val << ' ' << frecv[val] << '\n';
        }
    }
    return 0;
}

Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.