Cześć!! 🙂 w kolejnym wpisie z serii junior & rekrutacja. W poprzedni artykule opisała kilka platform rekrutacyjnych. Jeśli więc nie czytałeś/łaś jeszcze serdecznie Cie tam zapraszam. W tym artykule zdecydowałam się przybliżyć nieco jedno z zadań rekrutacyjnych które jakiś czas temu otrzymałam. Ponieważ było to zadanie na czas jedyne co zdążyłam zrobić to sporządzić szybkie notatki aby później jeszcze raz przyjrzeć się mu przyjrzeć.
Treść zadania mniej więcej wyglądała następująco: poproszono o policzenie absolutnej minimalnej sumy tablicy integerów. Jako przykład miałam podane następujące wartości: [1,3,3,2,4] gdzie n = 5. Należało odejmować kolejno wartości bezwzględne np: |1 – 2| = 1, |2 – 3| = 1, |3 – 3| = 0, |3 – 4| = 1 zaś suma minimalna to 1+1+0+1 = 3. Przykładowe dane dla którego miałam wykonać zadanie to n=5, suma = 6, tablica [5,1,3,7,3]
Gdy przyjrzymy się przykładowi [1,3,3,2,4] zobaczymy że tablica najpierw została posortowana. Do rozwiązania zadania zastosowałam sortowanie przez wymianę/wybieranie. W dalszej części rozwiązania wykorzystuje metodę na policzenie sumy absolutnej.
Wracając do algorytmu sortowania przez wybieranie – algorytm ten na początku szuka najmniejszego elementu. Następnie po jego znalezieniu zamienia go z pierwszym elementem tablicy. Kolejnym krokiem jest szukanie drugiego najmniejszego elementu. Ponieważ zostanie on zamieniony z drugim obecnym elementem w tablicy. Pierwszy odnaleziony element jest już na swoim miejscu, dlatego zastaje on pomijany. Procedura jest powtarzana aż do n-tego elementu tablicy.
public static int arraySort(int[] sorted) { int temp; int min; /* przechodzimy przez wszystkie elementy tablicy, do naszego min przypisujemy obecną wartości która znajduje pod indeksem zerowym w tablicy. */ for (int i = 0; i < sorted.length; i++) { min = i; //przechodzimy przez kolejne elementy tablicy for (int j = i; j < sorted.length; j++) { /* sprawdzamy czy wartość pod obecnym indeksem "j" jest mniejsza od naszego obecnego min. Jeżeli tak jest, to do obecnego min przypisujemy nową mniejszą wartość.*/ if (sorted[j] < sorted[min]) { min = j; } } // zamieniamy elementy w tablicy. temp = sorted[i]; sorted[i] = sorted[min]; sorted[min] = temp; } // wypisanie posortowanej tablicy [1,3,3,5,7] System.out.println(Arrays.toString(sorted)); //wykorzystanie metody na policzenie sumy absolutnej int absSum = getAbsoluteSum(sorted); System.out.print(absSum); return absSum; }
Teraz omówienie drugiej części zadania, czyli stworzenie metody na policzenie sumy absolutnej. Wykorzystałam tutaj metodę abs z klasy Math oraz klasyczne pętle for w celu wykonania następujących działań: |1 – 3|=2, |3-3| = 0, |3 – 5| = 2, |5 – 7| = 2; 2+0+2+2+=6;
private static int getAbsoluteSum(int[] sorted) { int absSum = 0; for (int i = 0; i < sorted.length - 1; i++) { elem0 = sorted[i]; elem1 = sorted[i + 1]; absSum += Math.abs(elem0 - elem1); } return absSum; }
Teraz już tylko pozostaje wywołać metodę w naszej metodzie main:
Oczekiwany wynik: posortowana tablica i suma absolutna.
Jeśli spodobał Ci się wpis przekaż dalej/zostaw laika może komuś innemu ten artykuł również będzie pomocny 🙂 Do zobaczenia w kolejnym wpisie 🙂 🙂 !!