Jak wyznaczyć liczbę która się powtarza?

0

Jest ciąg o rozmiarze n i trzeba wyznaczyć jaka liczba się powtarza najczęściej i ile razy (przykład: jest ciąg 9, 1, 2, 3, 4, 5, 4. Najczęściej powtarza się liczba '4', 2 razy). Bardzo proszę o podawanie jak najszybszych rozwiązań w C++.

1

A jaki jest zakres tych liczb? Jak mały to użyj zwykłego zliczania
for liczba in ciąg:
conter[liczba]++;
A jak liczby mogą być bardzo duże, to to samo, ale z użyciem hashmapy

1

Najszybsze będzie zliczanie do mapy – dla std::unordered_map (hashmapa), która ma średni koszt wstawiania O(1), ostatecznie będzie O(n):

  1. Skanowanie wejścia + wstawianie: O(n * O(1)) = O(n) (średnio)
  2. Znalezienie maksymalnej wartości w hashmapie: O(n)
    W sumie czas liniowy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1