Robiłem dzisiaj zadanie rekrutacyjne na Codility, niestety nie zrobiłem screena, ale jego treść to +/- coś takiego. Mając int[] zwróć ilość par indeksów mających przypisaną tą samą wartość. Numer pierwszego indeksu musi być mniejszy niż jego pary czyli przy tablicy:
[0] = 1;
[1] = 2;
[2] = 0;
[3] = 1;
[4] = 1;
mamy 3 pary (0-3,0-4,3-4), ale już dla [4] nie ma pary. Dodatkowo tablica może mieć od 0 do 100000 liczb, a każda z nich >-1mld && <1mld. Napisałem coś takiego:
int counter = 0;
for(int i=0;i<arr.length;i++) {
for(int j=i+1;j<arr.length;j++) {
if(arr[i]==arr[j]) {
counter++;
}
}
}
Sprawdziłem kilka spraw testowych z małym wolumenem i działało poprawnie. Na podsumowaniu jednak za performance dostałem całe 0% i tutaj pojawia się moje pytanie. Czy powyższe rozwiązanie pod względem wydajności jest tak beznadziejne? Jak później zacząłem się zastanawiać to może lepiej byłoby w drugiej pętli zrobić stream ze skipem już sprawdzonych elementów, zrobić filtr i zwrócić count.