10 najpopularniejszych algorytmicznych pytań rekrutacyjnych

Zdjęcie wykonane przez Michała Wachowskiego.

Ta lista ma ciebie przygotować na rekrutera, który wpisał w Google „algorytmy pytania rekrutacyjne” :). On nie ma świadomości, że te pytania i te problemy  odbiegają od rzeczywistości, w której codzienną pracą programisty jest przesuwanie przycisku o 2 piksele w prawo, lub wymyślanie nowego zapytania do SQLa.

Chcesz przejść każdą rozmowę o pracę? Musisz znać te 10 algorytmów. Istnieje wysokie prawdopodobieństwo, że napiszesz te algorytmy na białej tablicy.

Przejdźmy przez 10 największych „szlagierów” – algorytmów do zaimplementowania na rozmowie o pracę.


1. FizzBuzz

Zadanie brzmi: Napisz program, który wyświetla liczby od 1 do 100. Dla liczb podzielnych przez 3 niech program wyświetli „Fizz”; dla liczb podzielnych przez 5 niech wyświetli 'Buzz’; a dla liczb podzielnych przez 15 niech wyświetli 'FizzBuzz’.

Zadanie stało się popularne przez Jeff Atwooda (założyciel StackOverflow oraz bloga Coding Horror).

Mimo, że zadanie jest banalne do wykonania, to potrafi odsiać grupę kandydatów, która totalnie nic nie umie.

Przykładowe rozwiązanie w C#:

2. Odwracanie listy jednokierunkowej
Uważa się, że to zadanie jest nie możliwe do wykonania bez użycia narysowania paru bloczków na tablicy. Nawet jak nie potrzebujesz tych bloczków, to narysuj je. Podczas wykonywania zadań rekrutacyjnych musisz pokazać jak myślisz (i pokazać, że myślisz).

3. Przeszukiwanie w głąb
4. Przeszukiwanie w wszerz
Te pytania to klasyk. Potrafią zaskoczyć każdego nieprzygotowanego.

5. Sprawdzenie czy lista jednokierunkowa posiada jakieś cykle
O możliwych rozwiązaniach tego problemu możesz przeczytać na wikipedii.

Jednym z rozwiązań jest algorytm przypominający „żółwia i zająca”. Masz dwa wskaźniki (bądź referencje) jeden wskaźnik przesuwasz o jeden element do przodu, drugi wskaźnik przesuwasz o dwie pozycje do przodu, aż do momentu, gdy oba wskaźniki się spotkają – to oznacza, że lista posiada w sobie pętle. Gdy „zając” wyląduje  wartości null oznacza to, że lista nie posiada pętli.

6. Posortowanie biliona liczb
Pytanie jest brzmi „jak szybko posortować bilion liczb”. Użycie funkcji Sort() nie wchodzi w grę, bo za wolne.

To pytanie jest zadawane po to, aby sprawdzić czy kandydat umie dopytać się dodatkowe informacje.
– Jakiego rodzaju są to liczby?
– Jest to wiek naszych użytkowników.
– Aha! To trzeba użyć takiego sortowania…

7. Odwrócenie słów w stringu
Proste:

8. Obliczanie średniej
Kolejne proste zadanie z trzema pułapkami.

  1. Czy sprawdzasz czy tablica ma jakieś dane?  Wykonaj sprawdzenie na Nulla oraz array.Length>0.
  2. Czy zmienna do której sumujesz dane z tablicy jest typem long zamiast int? Unikamy int overflow.
  3. Czy dzieląc sumę przez długość tablicy przez przypadek nie ucinamy części dziesiętnej.

9. Sprawdzenie czy string jest palidromem.
Trzeba sprawdzić czy tekst taki sam czytany od początku i od tyłu. Trzeba ustalić czy ignorujemy białe znaki.

10. Zlicz litery w tekście
Poprawne rozwiązanie używa kontenera klucz wartość