Javin Paul
Javin PaulSoftware Architect / Blogger @ Infotech

20 zadań z zakresu list, które możesz dostać podczas rekrutacji

Poznaj listę często zadawanych podczas rozmów kwalifikacyjnych zadań z kodowania list.
1.04.20224 min
20 zadań z zakresu list, które możesz dostać podczas rekrutacji

Często dzielę się potencjalnymi pytaniami rekrutacyjnymi z programistami, którzy aktywnie poszukują pracy. Szczególnie pytaniami dla początkujących i inżynierów komputerowych, którzy właśnie ukończyli studia, ale nie mają prawdziwego doświadczenia zawodowego. Dziś podzielę się listą często zadawanych podczas rozmów kwalifikacyjnych zadań z kodowania list.

Struktury danych są jedną z najważniejszych części rozmowy kwalifikacyjnej i to na ich podstawie często zapada decyzja o zatrudnieniu kandydata, dlatego też ćwiczenie zadań z zakresu struktur danych da Ci przewagę nad konkurentami. Uczyni Cię również lepszym programistą, ponieważ rozwiązując takie zadania, rozwijasz zmysł do logiki i kodowania.

Co to jest lista?

Lista jest powszechną strukturą danych, która uzupełnia strukturę danych tablicy. Podobnie jak tablica,również jest to liniowa struktura danych i w liniowy sposób przechowuje elementy. Jednak w odróżnieniu od tablicy, nie przechowuje ich w sąsiednich lokalizacjach. Zamiast tego są one rozproszone w pamięci i są powiązane ze sobą za pomocą węzłów.

Lista jest niczym innym jak listą węzłów, gdzie każdy węzeł zawiera zapisaną wartość i adres następnego węzła.

Ze względu na taką strukturę, łatwo jest dodawać i usuwać elementy z listy, ponieważ wystarczy zmienić link zamiast tworzyć tablicę. Jednak wyszukiwanie jest trudne i często wymaga O(n) czasu na znalezienie elementu w liście jednokierunkowej.

Występuje również w kilku odmianach, takich jak lista jednokierunkowa, która pozwala na przejście w jednym kierunku (tylko do przodu lub do tyłu). Lista dwukierunkowa, która pozwala na przejście w obu kierunkach (do przodu i do tyłu) i wreszcie lista cykliczna, która tworzy zamknięte koło.

Jak rozwiązywać zadania z list?

Aby rozwiązywać zadania z zakresu list, ważna jest dobra znajomość zagadnień związanych z rekurencyjnością, ponieważ lista jest rekurencyjną strukturą danych.

Jeśli weźmiesz jeden element z listy, pozostała struktura danych jest nadal listą i z tego powodu wiele problemów z listami ma prostsze rozwiązania rekurencyjne niż iteracyjne.

Są one również rozwiązywane przy użyciu techniki "dziel i zwyciężaj", która rozbija problem na podproblemy, aż do momentu, gdy podproblem da się rozwiązać.

Np. aby odwrócić listę, dzielisz ją do momentu, aż zostanie tylko jeden element. W tym momencie wiesz, jak odwrócić listę z jednym elementem, która jest niczym innym niż tym samym elementem.

Jest to bardzo podobne do rekurencyjności, a w rzeczywistości najmniejszy problem, który można rozwiązać, staje się podstawą rekurencyjnych rozwiązań.

Nie ma sensu rozwiązywać tych zadań z kodowaniem list, jeśli nie masz podstawowej wiedzy na temat struktur danych lub jeśli jej sobie ostatnio nie odświeżyłeś. W takim przypadku sugeruję, abyś najpierw przeszedł przez dobre kursy struktury danych i algorytmów lub przeczytał tę książkę, by przypomnieć sobie o co chodzi.

Jeśli potrzebujesz rekomendacji, poniżej znajduje się kilka wypróbowanych i przetestowanych przeze mnie zasobów, dzięki którym dogłębnie poznasz struktury danych i algorytmy:


Jeśli wolisz książki, nie ma nic lepszego niż wprowadzenie do Algorytmów Thomasa H. Cormena. Jest to jedna z najbardziej wszechstronnych książek o strukturach danych i algorytmach.

Najczęściej zadawane pytania z zakresu kodowania list 

Oto niektóre z pytań najczęściej zadawanych na rozmowach kwalifikacyjnych. Tam, gdzie było to możliwe, podlinkowałem odpowiedzi, ale sugeruję, abyś najpierw spróbował rozwiązać problem na własną rękę, co pozwoli Ci pogłówkować i przy okazji czegoś się nauczyć. Kiedy już rozwiążesz problem lub próbowałeś to zrobić, ale utknąłeś, możesz przyjrzeć się rozwiązaniu i wyciągnąć z niego wnioski.

  • Jak znaleźć środkowy element listy jednokierunkowej w jednym przejściu? (rozwiązanie)
  • Jak sprawdzić, czy dana lista zawiera cykl? Jak znaleźć element początkowy cyklu? (rozwiązanie)
  • Jak odwrócić listę? (rozwiązanie)
  • Jak odwrócić listę jednokierunkową bez rekurencji? (rozwiązanie)
  • W jaki sposób można usunąć zduplikowane elementy w nieposortowaniej liście? (rozwiązanie)
  • Jak znaleźć długość listy jednokierunkowej? (rozwiązanie)
  • Jak znaleźć trzeci element od końca w liście jednokierunkowej (rozwiązanie)
  • Jak znaleźć sumę dwóch list za pomocą stosu? (rozwiązanie)
  • Jak odwrócić listę w miejscu? (rozwiązanie)
  • Jak dodać element na środku listy? (rozwiązanie)
  • Jak sortować listę w Javie? (rozwiązanie)
  • Jaka jest różnica między tablicą a listą? (odpowiedź)
  • Jak usunąć n-ty element od końca listy? (rozwiązanie)
  • Jak połączyć dwie posortowane listy? (rozwiązanie) 
  • Jak przekonwertować posortowaną listę do binarnego drzewa wyszukiwania? (rozwiązanie)
  • Mając listę i wartość x, podziel ją w taki sposób, że wszystkie elementy mniejsze niż x znajdowały się przed elementami większymi lub równymi x. (rozwiązanie)
  • Jak usunąć duplikaty z posortowanej listy? (rozwiązanie)
  • Jak znaleźć element, w którym zaczyna się przecięcie dwóch pojedynczo połączonych list? (rozwiązanie)
  • Jak sprawdzić, czy dana lista jest palindromem? (rozwiązanie)
  • Jak usunąć wszystkie elementy z listy liczb całkowitych, które odpowiadają podanej wartości? (rozwiązanie)


Powyższe pytania pomogą Ci rozwinąć umiejętności rozwiązywania problemów, a także poszerzyć wiedzę na temat struktur danych list.

Jeśli wciąż brakuje Ci zadań do rozwiązania, możesz również sprawdzić tę listę 30 pytań z zakresu list na rozmowę kwalifikacyjną, gdzie znajdziesz jeszcze więcej zadań praktycznych.

Podsumowanie

Dzięki, udało Ci się dotrzeć do końca artykułu. Powodzenia na rozmowie kwalifikacyjnej! Z pewnością nie będzie to łatwe, ale po przećwiczeniu tych pytań będziesz o krok bliżej sukcesu i pracy, o której zawsze marzyłeś. 


Oryginał tekstu w języku angielskim przeczytasz tutaj.

<p>Loading...</p>