najczęściej występujące elementy w tablicy java

0

Witam, mam do napisania program wyświetlający wszystkie elementy, które pojawiają się najczęściej w tablicy.

W pierwszej pętli for zliczam ile najczęściej występuje jakiś element (max - maksymalna liczba wyświetleń). W drugiej pętli for sprawdzam, które elementy tablicy pojawiły się max razy. Te elementy chcę zapisać w tablicy 'tab'. Jednak tutaj popełniam błąd, ponieważ chcę uzyskać [5, 7] a wyświetla się [5, 7, 5, 7, 7, 5, 7, 5]. Błąd zaczyna się gdzieś w pętlach od linijki "int k=0" jednak nie umiem tego naprawić, proszę o pomoc. 

int[] tablica = {4,5,7,6,3,5,7,8,7,5,7,5,8,4,3};        
         
        int max = 0;            
        int element = tablica[0];       
        int[] tab = {};
         
        for (int i = 0; i < tablica.length; i++) {
            int licznik = 0;
            for (int j = 0; j < tablica.length; j++) {
                if (tablica[i] == tablica[j]) {
                    licznik++;
                }
            }                       
            if (licznik > max) {
                max = licznik;              
            }                   
        }   
         
        for (int i = 0; i < tablica.length; i++) {
            int licznik = 0;
            for (int j = 0; j < tablica.length; j++) {
                if (tablica[i] == tablica[j]) {
                    licznik++;
                }
            }
             
            if (licznik == max) {
                element = tablica[i];           
                 
                int[] tab1 = new int[tab.length+1];
                int k=0;            
                for (; k < tab.length; k++) {                            
                    tab1[k] = tab[k];
                }
                 
                for (int e : tab1) {
                    if (element != e) {
                        tab1[k] = element;
                    }               
                }
                tab = tab1;
            }       
        }   
        System.out.println(Arrays.toString(tab));

1

Alborytm typu "bardzo chciałem". Ma złożoność obliczeniową przynajmniej kwadratową.
Mi się go stanowczo źle czyta (w tym: długi blok kodu, zamiast metod z DOBRĄ nazwą)

Wydaje się że ... ja bym zliczał do jakiegoś Map<liczba, ilośc> i kuuuupę tam jest za darmo

2
Map<Integer, Long> groupedByCount= Arrays.stream(tablica).boxed()
                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
0

@blabsi aaaaaaaa a czemu przy okazji zmieniania max na licznik nie zapamiętujesz w drugiej zmiennej dla którego elementu ta sytuacja miała miejsce? Przecież wiesz ze to dla tablica[i] więc łaskawie zrób drugą zmienną max_index i przypisz do niej i jak zmieniasz max. Nagle nie trzeba będzie robić jakiegoś cyrku z szukaniem tego maxa drugi raz.

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