Jakiś czas temu opisałam jedno z zadań rekrutacyjnych które jakiś czas temu otrzymałam. Znajduje się ona w artykule: Junior & rekrutacja cz.2.
Dziś aktualizuje ten artykuł ponieważ otrzymałam do mojego wcześniejszego rozwiązania bardzo wartościowy i cenny feedback za co serdecznie dziękuje :).
1. Zadanie rekrutacyjne
Dla krótkiego przypomnienia – moim zadaniem rekrutacyjnym było policzenie absolutnej minimalnej sumy tablicy integerów np: n=5, suma = 6, tablica [5,1,3,7,3]. W moim poprzednim rozwiązaniu zastosowałam m.in algorytm sortowania przez wybieranie. W nowej implementacji zastosowałam metodę Arrays.sort() z pakietu: java.util.Arrays.
2. Nowe rozwiązanie
Stworzyłam dwie metody w klasie: AbsolteMinSum. Na początku korzystam z metody copyOf dzięki czemu sortowanie tablicy odbywać się będzie na skopiowanej oryginalnej tablicy.
private int[] arraySort(int[] arr) { int[] arrayToSort = Arrays.copyOf(arr, arr.length); Arrays.sort(arrayToSort); return arrayToSort; //[1,3,3,5,7] }
Następnie na posortowanej tablicy korzystając z metody Math.abs obliczam sumę absolutną wg wzoru:
|1-3| = 2 |3-3| = 0 |3-5| = 2 |5-7| = 2; suma: 2+0+2+2=6
public int calculateAbsoluteSum(int[] sorted) { int absoluteSum = 0;
arraySort(sorted); for (int i = 0; i < sorted.length - 1; i++) { int elem0 = sorted[i]; //1 int elem1 = sorted[i + 1]; //3 absoluteSum += Math.abs(elem0 - elem1); } return absoluteSum; }
3. Podsumowanie
Dzięki tym zmianą kod stał się czytelniejszy w szczegolności dzięki zastosowaniu gotowej metody na sortowanie z samej Javy. Również metodzie calculateAbsoluteSum nadałam większe uprawnienia zmieniając modyfikator z prywatnego na publiczny i wydzielając ją w ten sposób z metody arraySort. Całość zaś przeniosłam do osobnej klasy „Main”. Link do Github’a: Devwords.
A Ty jak rozwiązał/a byś to zadanie? Chętnie przeczytam w komentarzu 🙂
Cześć!
Fajnie, że dzielisz się zadaniami rekrutacyjnymi na blogu, na pewno innym to się przyda! 🙂
W ramach tego zadania poleciłbym Ci, aby `AbsoluteMinSum` samo sobie wewnętrznie sortowało przekazaną tablicę np. w metodzie prywatnej, która będzie wywoływana przez metodę `getAbsoluteSum`. Tej metodzie zmieniłbym nazwę na `calculateAbsoluteSum`. 🙂
To takie dwie moje podpowiedzi, aby trochę zamknąć wewnętrzną implementację przed światem zewnętrznym. Bo ktoś może nie wiedzieć, że do `getAbsoluteSum` trzeba przekazać posortowaną tablicę. 😉
Pozdrawiam i trzymaj się tej tematyki, bo na pewno jest chodliwa!
Cześć, dziękuje 🙂 zawsze bardzo się cieszę z takich konstruktywnych sugestii 🙂 . Już je zaimplementowałam i zaktualizowałam artykuł 🙂
Pozdrawiam serdecznie 🙂