Java - tablice - wyeliminuj wszystkie powtórzenia elementów tablicy

Odpowiedz Nowy wątek
2018-11-07 19:47
0

No właśnie. Jak wyeliminować wszystkie powtórzenia elementów tablicy?

Mój tok myślenia, czy jest poprawny?

Tworzymy zmienną do zliczania powtórzonych wyrazów, lecimy po tablicy po i (lecimy po tablicy po j, bo chcemy każdy wyraz z każdym) i porównujemy czy element tablicy i jest równy elementowi z j, jeśli tak to inkrementujemy zmienną do zliczania (jeśli zmienna wyjdzie zero to zwracamy niezmienioną tablicę)
i tworzymy nową tablicę o rozmiarze starej pomniejszony o ilość zliczonych powtórzeń

No właśnie, i jak teraz przekopiować te stare niepowtórzone wyrazy?

Pozostało 580 znaków

2018-11-07 19:53
eL
0

Nie ma sensu zliczać jeśli potrzebujesz tylko unikatów.
Moim zdaniem najlepiej przenieść te elementy z tablicy na listę bo lista dostarcza Ci metodę contains którą sprawdzasz czy druga kolekcja zawiera jakiś element. Potem lecisz po pierwszej kolekcji i porównujesz z drugą. Unikaty przepisujesz do nowej tablicy.

Najlepiej jednak zrobić to na streamach, np. tak :

List<Integer> listWithoutDuplicates = listWithDuplicates.stream()
     .distinct()
     .collect(Collectors.toList());

Ale już dzisiaj taki jeden był co to szukał prawie identyczne zadanie więc pewnie musi to być zrobione na forach. Poszukaj temat w dziale Java.

Potem lecisz po pierwszej kolekcji i porównujesz z drugą. brzmi jak O(n^2), podczas gdy można to spokojnie zrobić w O(n log n) :-P - Patryk27 2018-11-07 20:26
@Patryk27: hmmm, kurteczka, uświadomiłes mi, że nie wiem jak. Chyba tylko jesli elementy są porządkowalne. Przy dowolnych elementach (gdy mamy tylko '==' ) to niestety tylko O(n^2) widzę. - jarekr000000 2018-11-07 22:45
@jarekr000000: racja, racja - w sumie autor faktycznie tylko wspomniał o możliwości porównywania, więc niekoniecznie uda się zejść poniżej O(n^2). - Patryk27 2018-11-08 08:09

Pozostało 580 znaków

2018-11-07 20:59
2

Zamień tablice na seta

Tylko metody hash i equals muszą być poprawnie zaimplementowane wtedy to najlepsze rozwiązanie - xxx_xx_x 2018-11-07 21:27

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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