50 najpopularniejszych pytań i odpowiedzi podczas rozmów kwalifikacyjnych (2026)

Przygotowujesz się do rozmowy kwalifikacyjnej w Array? Czas skupić się na pytaniach, które mogą Ci się pojawić. Zrozumienie słowa kluczowego {{keyword}} pomaga kandydatom skutecznie wykazać się analitycznym myśleniem, logiką i umiejętnością rozwiązywania problemów.

Tablice stanowią podstawę doświadczenia technicznego i zawodowego dla programistów. Zarówno początkujący, jak i doświadczeni specjaliści, ich opanowanie świadczy o solidnej wiedzy technicznej i podstawowym doświadczeniu w manipulacji danymi. Pracodawcy cenią sobie takie umiejętności podczas sesji pytań i odpowiedzi.ping Kandydaci zdają egzaminy podstawowe, zaawansowane lub ustne, wykazując się pewną analizą i praktycznymi umiejętnościami.

Zbiór ten powstał na podstawie spostrzeżeń ponad 85 liderów technicznych, menedżerów i specjalistów, obejmuje różnorodne perspektywy z różnych branż, gwarantując, że każdy temat odzwierciedla rzeczywiste oczekiwania rekrutacyjne i standardy oceny umiejętności kodowania w świecie rzeczywistym.

Pytania i odpowiedzi do wywiadu Array

Najczęściej zadawane pytania i odpowiedzi na rozmowach kwalifikacyjnych

1) Wyjaśnij, czym jest tablica i czym różni się od innych struktur danych.

Tablica to ciągły blok pamięci, który przechowuje wiele elementów tego samego typu danych. Umożliwia ona stały dostęp do dowolnego elementu za pomocą indeksu, co czyni ją jedną z najefektywniejszych struktur dostępu losowego. W przeciwieństwie do list powiązanych, tablice mają stały rozmiar i nie wymagają narzutu na przechowywanie wskaźników. Tablice są preferowane, gdy liczba elementów jest znana z góry, natomiast struktury dynamiczne, takie jak listy lub wektory, są używane, gdy przewidywana jest częsta zmiana rozmiaru.

Cecha Szyk Połączona lista
Przydział pamięci Przyległy Nieciągły
Czas dostępu O (1) Na)
Wstawianie/usuwanie Kosztowny Wydajny
Nadwyżka pamięci Niski Wysokie (wskaźniki)

👉 Bezpłatne pobieranie pliku PDF: Pytania i odpowiedzi na pytania dotyczące wywiadów


2) Jakie są różne typy tablic? Podaj przykłady.

Tablice są klasyfikowane na podstawie ich wymiarów i przeznaczenia. Podstawowe typy obejmują:

  • Tablica jednowymiarowa: Przechowuje elementy liniowo, np. int arr[5] = {1,2,3,4,5}.
  • Tablica dwuwymiarowa: Reprezentuje dane tabelaryczne, np. macierze.
  • Tablica wielowymiarowa: Wyższe wymiary, często stosowane w symulacjach lub przetwarzaniu obrazu.
  • Tablice dynamiczne: Automatyczna zmiana rozmiaru podczas dodawania elementów, np. ArrayList in Java, vector in C++.
Typ Structure Przykład
1D Liniowy [1, 2, 3]
2D Matrix [[1, 2], [3, 4]]
Dynamiczny Zmiana rozmiaru std::vector<int>

3) Jak znaleźć największy i najmniejszy element w tablicy?

Ten problem często rozwiązuje się za pomocą przejścia liniowego. Utrzymuje się dwie zmienne – jedną dla wartości minimalnej i jedną dla wartości maksymalnej – i aktualizuje się je podczas iteracji.

Algorytm:

  1. Inicjalizacja min oraz max z pierwszym elementem.
  2. Przejrzyj tablicę i porównaj każdy element.
  3. Aktualizacja min or max odpowiednio.

Przykład (C++):

int arr[] = {5, 2, 9, 1, 7};
int min = arr[0], max = arr[0];
for (int i : arr) {
    if (i < min) min = i;
    if (i > max) max = i;
}

Złożoność czasowa: NA).


4) Jakie są zalety i wady tablic?

Tablice zapewniają wysoką wydajność w przypadku dostępu losowego, ale mają stały rozmiar i wymagają kosztownej zmiany rozmiaru.

WYGLĄD Zalety Wady
Wydajność Szybkie indeksowanie (O(1)) Powolne wstawianie/usuwanie (O(n))
Pamięć Kompaktowe miejsce do przechowywania Statyczna alokacja rozmiaru
Wdrożenie Prosta składnia Brak ograniczeń w sprawdzaniu niektórych języków
Przypadek użycia Nadaje się do stałych zestawów danych Nieefektywne w przypadku częstych modyfikacji

5) Opisz różnicę pomiędzy tablicami statycznymi i dynamicznymi.

A tablica statyczna ma stały rozmiar określony w czasie kompilacji, podczas gdy tablica dynamiczna mogą rosnąć lub kurczyć się w trakcie działania. Tablice statyczne są wydajne pod względem wykorzystania pamięci, ale sztywne, podczas gdy tablice dynamiczne zapewniają elastyczność przy niewielkim narzucie podczas zmiany rozmiaru.

Cecha Tablica statyczna Tablica dynamiczna
Rozmiar Stały Zmienna
Pamięć Stos kupa
Przykład int arr[5]; std::vector<int>
Zmiana rozmiaru Nie jest obsługiwany Utrzymany

Przykładowy przypadek użycia:
W systemach wbudowanych należy stosować tablice statyczne, natomiast w przypadku kolekcji o nieprzewidywalnym rozmiarze – tablice dynamiczne.


6) Jak można odwrócić tablicę w miejscu?

Reversing tablicy w miejscu wymaga zamianyping elementy z obu końców przesuwają się w kierunku środka.

Algorytm:

  1. Zainicjuj dwa wskaźniki: start = 0 oraz end = n - 1.
  2. Zamień elementy arr[start] oraz arr[end].
  3. Przyrost start i dekrementacja end dopóki się nie spotkają.

Przykład (Python):

arr = [1, 2, 3, 4, 5]
arr.reverse()  # Built-in method
# or manually
arr = arr[::-1]

Złożoność czasowa: NA), Złożoność przestrzeni: O(1).


7) Jaka jest różnica między tablicą ząbkowaną a tablicą wielowymiarową?

A poszarpana tablica jest tablicą tablic, w której wewnętrzne tablice mogą mieć różną długość, podczas gdy tablica wielowymiarowa ma jednakowe rozmiary wierszy i kolumn.

Cecha Postrzępiona tablica Tablica wielowymiarowa
Structure Nieregularne (tablice zagnieżdżone) Prostokątny (macierz)
Pamięć Nieciągły Przyległy
Uzyskiwania dostępu arr[i][j] arr[i][j]
Przykład int[][] jagged = {{1,2}, {3,4,5}}; int[,] matrix = {{1,2}, {3,4}};

Tablice ząbkowane są bardziej wydajne pod względem wykorzystania pamięci, gdy dane są nierówne.


8) Jak znaleźć brakującą liczbę w tablicy liczb od 1 do n?

W tym problemie wykorzystano matematyczne właściwości liczb naturalnych.

Podejście 1 (wzór sumy):
Suma pierwszego n liczby naturalne = n*(n+1)/2.

Podłożetract suma elementów tablicy z tej całości.

Podejście 2 (XOR):
Wykonaj operację XOR na wszystkich elementach o numerach od 1 do n. Pozostała wartość to brakująca liczba.

Przykład:
Dla litu szacuje się [1,2,4,5,6] (n=6):

Oczekiwana suma = 21, Rzeczywista suma = 18 → Brakuje = 3.

Złożoność czasowa: NA), Złożoność przestrzeni: O(1).


9) Jakie są różne sposoby usuwania duplikatów z tablicy?

Istnieje kilka podejść w zależności od języka i ograniczeń:

  • Korzystanie z HashSet: Przechowuj tylko unikalne elementy.
  • Korzystanie z sortowania: Posortuj tablicę i usuń sąsiadujące duplikaty.
  • Korzystanie z mapy częstotliwości: Track liczb każdego pierwiastka.

Przykład (Java):

Set<Integer> unique = new HashSet<>(Arrays.asList(arr));
Podejście Czas Typ przestrzeni
Zestaw skrótów Na) Na)
Sortowanie O (n log n) O (1)
Częstotliwość Na) Na)

10) Jak znaleźć drugi co do wielkości element w tablicy?

Drugi co do wielkości element można znaleźć za pomocą jednego przejścia, zachowując dwie zmienne.

Algorytm:

  1. Inicjalizacja first oraz second as INT_MIN.
  2. Przejrzyj tablicę.
  3. Zaktualizuj obie wartości, gdy zostanie znaleziona większa wartość.

Przykład (C++):

int first = INT_MIN, second = INT_MIN;
for (int x : arr) {
    if (x > first) {
        second = first;
        first = x;
    } else if (x > second && x < first) {
        second = x;
    }
}

Złożoność czasowa: NA), Złożoność przestrzeni: O(1).


11) Jak obrócić tablicę o „k” pozycji? Wyjaśnij różne podejścia.

Obrót tablicy powoduje cykliczne przesuwanie elementów. Istnieją trzy główne metody aby to osiągnąć:

  1. Korzystanie z tablicy tymczasowej: Skopiuj pierwsze k elementów i dodaj je na końcu po przesunięciu pozostałych.
  2. Korzystanie z RevAlgorytm ersal: Reverse trzy części tablicy – ​​pierwsza część, druga część, a następnie cała tablica.
  3. Korzystanie z algorytmu żonglowania: Na podstawie NWD n i k (efektywny w O(n)).

Przykład (obrót w prawo o 2):

Input: [1,2,3,4,5]
Output: [4,5,1,2,3]
Metoda wykonania Czas Typ przestrzeni OPIS
Tablica tymczasowa Na) Ok) Prosty i intuicyjny
Reversal Na) O (1) Na miejscu i wydajnie
Żonglerka Na) O (1) Na podstawie cykli NWD

12) Czym jest podtablica i czym różni się od podsekwencji?

A podtablica jest ciągłą sekcją tablicy, podczas gdy podsekwencja zachowuje porządek, ale może pomijać elementy.

Właściwość Podtablica Podsekwencja
Przyległy Tak Nie
Zamówienie zachowane Tak Tak
Przykład (z [1,2,3]) [1,2] [1,3]

Przykład:
Podano tablicę [1,2,3], całkowita liczba podtablic = n*(n+1)/2 = 6.

Podsekwencje natomiast są 2ⁿ - 1 = 7 niepuste kombinacje.


13) Jak znaleźć podtablicę sumy maksymalnej?

Algorytm Kadane'a jest najbardziej efektywnym sposobem znalezienia ciągłej podtablicy o maksymalnej sumie.

Kroki:

  1. Inicjalizacja max_current = max_global = arr[0].
  2. Przechodź przez elementy.
  3. Aktualizacja max_current = max(arr[i], arr[i] + max_current).
  4. Track maksimum globalne.

Przykład:
Wejście: [-2,1,-3,4,-1,2,1,-5,4] → Wyjście: 6 (podtablica [4,-1,2,1]).

Złożoność:
Czas O(n), przestrzeń O(1).


14) Jak można połączyć dwie posortowane tablice bez zajmowania dodatkowej przestrzeni?

Aby połączyć dwie posortowane tablice w miejscu, pomysł jest taki, aby porównywać od końca obie tablice.

Podejście:

  1. Zacznij od ostatniego prawidłowego elementu obu tablic.
  2. Porównaj i przenieś większy na koniec połączonej przestrzeni.
  3. Powtarzaj, aż wszystkie elementy zostaną połączone.

Przykład (C++):

int i = m-1, j = n-1, k = m+n-1;
while (i >= 0 && j >= 0) {
    if (A[i] > B[j]) A[k--] = A[i--];
    else A[k--] = B[j--];
}

Złożoność czasowa: O(m+n).


15) Jakie są różne sposoby przeszukiwania elementów tablicy?

Metoda wykonania Typ Złożoność czasowa Przykładowe zastosowanie
Wyszukiwanie liniowe Nieposortowany Na) Wyszukiwanie ogólne
Wyszukiwanie binarne Sortowane O (log n) Efektywne wyszukiwanie
Hashing Nieuporządkowane O(1) średnia Duże zbiory danych

Przykład (wyszukiwanie binarne – Python):

def binary_search(arr, x):
    l, r = 0, len(arr)-1
    while l <= r:
        mid = (l+r)//2
        if arr[mid] == x: return mid
        elif arr[mid] < x: l = mid+1
        else: r = mid-1
    return -1

16) Wyjaśnij różnicę między kopią płytką i kopią głęboką w tablicach.

A płytka kopia kopiuje odniesienia do oryginalnych elementów, podczas gdy głęboka kopia duplikuje wszystkie dane do nowych lokalizacji pamięci.

Typ kopiowania Niezależność danych Przykład
Płytki Nie arr_copy = arr
Głęboki Tak arr_copy = arr[:] (Python)

Przykład:
Modyfikacja płytkiej kopii ma odzwierciedlenie w oryginalnej tablicy, natomiast głęboka kopia nie.


17) Jak znaleźć duplikaty w tablicy bez zajmowania dodatkowej przestrzeni?

Podejście 1 (sortowanie): Posortuj i sprawdź sąsiadujące elementy.

Podejście 2 (metoda negacji dla wartości 1–n): Mark odwiedził indeksy negując element o danym indeksie.

Podejście 3 (wykrywanie cykli Floyda): Potraktuj tablicę jako listę powiązaną i znajdź cykl (dla powtarzających się elementów w zakresie [1..n]).

Przykład:
Szyk [3,1,3,4,2] → Duplikat = 3.

Czas: NA), Przestrzeń: O(1).


18) Czym są tablice rzadkie i jakie mają zalety?

A rzadka tablica Zawiera głównie wartości zerowe lub domyślne. Zamiast przechowywać wszystkie elementy, przechowujemy tylko wpisy różne od zera wraz z ich indeksami.

Zalety:

  • Oszczędza pamięć.
  • Skuteczne w przypadku dużych zbiorów danych, takich jak macierze lub częstotliwości terminów w dokumentach.
Typ Przykład Przypadek użycia
Gęsta tablica [0,1,0,2,3] Małe dane
Rzadka tablica {1:1, 3:2, 4:3} Duże, rzadkie dane

Przykład: Stosowany w modelach uczenia maszynowego (macierze TF-IDF).


19) Jak można efektywnie znaleźć część wspólną dwóch tablic?

Przecięcie można znaleźć stosując techniki haszujące i sortujące.

  • Korzystanie z HashSet: Dodaj elementy pierwszej tablicy, a następnie sprawdź przynależność do drugiej.
  • Używanie dwóch wskaźników: Działa na tablicach sortowanych.

Przykład (Python):

intersection = list(set(arr1) & set(arr2))

Złożoność:

  • Zestaw skrótów: O(n)
  • Dwa wskaźniki: O(n log n) ze względu na sortowanie.

20) Wyjaśnij różnicę między kolejnością wierszy i kolumn w tablicach.

Oto kolejność przechowywania danych w pamięci stosowana w tablicach wielowymiarowych.

Pojęcie Rząd-Major (C/C++) Kolumna-główna (Fortra(np. MATLAB)
Zamówienie magazynowe Rząd po rzędzie Kolumna po kolumnie
Wzór adresu Base + ((i * cols) + j) * size Base + ((j * rows) + i) * size
Przewaga Szybciej w przypadku przechodzenia przez wiersze Szybciej w przypadku przechodzenia przez kolumny

Przykład:
Dla tablicy 2D A[2][3], sklepy wielobranżowe [A[0][0], A[0][1], A[0][2], A[1][0], ...].


21) Na czym polega technika sumy prefiksowej i jak jest ona stosowana w tablicach?

suma prefiksów Technika ta polega na wstępnym obliczeniu sum skumulowanych tablicy w celu wydajnego odpowiadania na zapytania o zakresy.

koncepcja:

prefix[i] = prefix[i-1] + arr[i]

Następnie, aby uzyskać sumę elementów od l do r, użyj:

sum(l, r) = prefix[r] - prefix[l-1]

Przykład:

Tablica = [2, 3, 5, 7, 1]

Prefiks = [2, 5, 10, 17, 18]

Suma(2,4) = prefix[4] - prefix[1] = 15

Aplikacje:
Stosowany w zapytaniach o sumy podtablic, tabelach częstości skumulowanych i programowaniu konkurencyjnym.

Złożoność:
Wstępne przetwarzanie: O(n), zapytanie: O(1)


22) W jaki sposób technika przesuwanego okna poprawia wydajność macierzy?

okno przesuwne Technika ta jest wykorzystywana do efektywnego rozwiązywania problemów obejmujących sąsiadujące segmenty (podtablice).

Idea: Zamiast przeliczać sumę lub warunek dla każdego okna, zaktualizuj wynik, dodając kolejny element i usuwając pierwszy.

Przykładowy problem:
Znajdź maksymalną sumę podtablicy o rozmiarze k.

Algorytm:

  1. Oblicz sumę pierwszego k elementy.
  2. Przesuwaj okno po jednym elemencie na raz.
  3. Dodaj nowy element, usuń pierwszy i track maksimum.

Złożoność czasowa: O(n) — znacznie szybsze niż naiwne podejście O(n×k).

Aplikacje:
Stosowane w takich problemach, jak maksymalna średnia podtablica, najdłuższy podciąg lub pierwsza liczba ujemna w każdym oknie.


23) Jaka jest różnica między tablicą a wskaźnikiem w języku C?

Cecha Szyk Wskaźnik
Definicja Zbiór podobnych elementów danych Zmienny adres pamięci przechowującej
Przydział pamięci Przyległy Dynamiczny lub dowolny
Rozmiar Stały Można zmienić rozmiar
Przykład int a[5]; int *p;

Kluczowa różnica:
Nazwa tablicy działa jak stały wskaźnik, ale wskaźnik może wskazywać dowolne miejsce w sposób dynamiczny.

Przykład:

int arr[3] = {1,2,3};
int *ptr = arr;  // ptr points to first element

24) Jak znaleźć indeks równowagi w tablicy?

An indeks równowagi pozycja, w której suma elementów po lewej stronie jest równa sumie po prawej stronie.

Algorytm:

  1. Oblicz całkowitą sumę tablicy.
  2. Przesuń i utrzymuj lewą sumę.
  3. If (total_sum - left_sum - arr[i]) == left_sum, zwróć indeks.

Przykład:
Szyk: [1, 3, 5, 2, 2] → Indeks = 2 (ponieważ suma lewa = suma prawa = 4)

Złożoność: NA), Przestrzeń: O (1)


25) Czym są macierze rzadkie i jak są one efektywnie przechowywane?

A rzadka macierz Zawiera głównie zera. Aby zaoszczędzić pamięć, przechowywane są tylko elementy niezerowe i ich indeksy.

Metody przechowywania:

  1. Lista współrzędnych (COO): Przechowywanie (wiersz, kolumna, wartość).
  2. Skompresowany wiersz rzadki (CSR): Trzy tablice: values, col_index, row_pointer.
  3. Słownik kluczy (DOK): Mapa skrótów (wiersz, kolumna) → wartość.
Metoda wykonania Wydajność pamięci Przykładowe zastosowanie
GRUCHAĆ Umiarkowany Magazynowanie ogólne
CSR Wysoki Obliczenia numeryczne
DOK Elastyczne Dynamiczne wstawianie

Szeroko stosowany w uczenie maszynowe (TF-IDF, macierze sąsiedztwa grafu).


26) Jak przeorganizować tablicę, aby liczby parzyste i nieparzyste pojawiały się naprzemiennie?

Celem jest przeplatanie liczb parzystych i nieparzystych, przy jednoczesnym zachowaniu ich względnej kolejności.

Algorytm:

  1. Oddziel tablice parzyste i nieparzyste.
  2. Połącz naprzemiennie zaczynając od parzystych lub nieparzystych.
  3. Jeśli zabraknie jednego rodzaju, dołóż resztę.

Przykład:

Input: [3, 6, 12, 1, 5, 8]
Output: [6, 3, 12, 1, 8, 5]

Złożoność: Na)


27) Wyjaśnij różnicę między obrotem i przesunięciem tablicy.

Operacja Rotacja ShiftING
Definicja Elementy poruszają się kołowo Elementy się przesuwają, wolne miejsca wypełniają się (np. 0)
Przykład [1,2,3,4] → [3,4,1,2] [1,2,3,4] → [0,1,2,3]
Utrata danych Nie Tak
Stosowanie Przegrupowania cykliczne Implementacje kolejek

W skrócie:
Obrót jest odwracalny, natomiast przesunięcie zwykle nie jest.


28) Jak znaleźć maksymalną podtablicę produktu?

Podobnie jak algorytm Kadane'a, ale ty track zarówno maksymalne jak i minimalne produkty ze względu na wartości ujemne.

Algorytm:

  1. Inicjalizacja max_ending_here = min_ending_here = arr[0].
  2. Powtórz i zaktualizuj oba elementy na podstawie bieżącego elementu.
  3. Track max_so_far.

Przykład:
Wejście: [2,3,-2,4] → Wyjście: 6 (podtablica [2,3])

Złożoność: NA), Przestrzeń: O (1)


29) W jaki sposób można efektywnie policzyć liczbę podtablic o podanej sumie?

Podejście (suma prefiksowa + mapa skrótów):

  1. Utrzymuj sumę bieżącą podczas iteracji.
  2. Dla każdej sumy prefiksów sprawdź, czy (current_sum - target) istnieje na mapie skrótów.
  3. Zwiększ liczbę odpowiednio.

Przykład:

arr = [10,2,-2,-20,10], target = -10
Output = 3 subarrays

Złożoność czasowa: Na)

Złożoność przestrzeni: Na)


30) Na czym polega manipulacja bitami w problemach tablicowych i gdzie jest stosowana?

Manipulacja bitami polega na wykonywaniu operacji AND, OR, XOR i przesunięć w celu efektywnego rozwiązywania problemów.

Typowe zastosowania:

  • Znalezienie pojedynczego niepowtarzalnego elementu za pomocą operacji XOR.
  • Sprawdzanie, czy podzbiór istnieje, za pomocą maskowania bitowego.
  • Reprezentowanie zbiorów jako wektorów bitowych.

Przykład:

Znajdź element pojawiający się raz, gdy inne pojawiają się dwa razy:

int res = 0;
for (int num : arr) res ^= num;

Zalety:

  • Stała przestrzeń
  • Szybkie obliczenia logiczne

31) Jak poruszać się po macierzy w kolejności spiralnej?

A przechodzenie spiralne odwiedza wszystkie elementy macierzy warstwa po warstwie zgodnie z ruchem wskazówek zegara.

Algorytm:

  1. Określ cztery granice: top, bottom, left, right.
  2. Przechodź od lewej → prawej, od góry → dołu, od prawej → lewej i od dołu → góry.
  3. Po każdym przejściu zmniejszaj granice, aż do pokrycia wszystkich elementów.

Przykład:

Input:
1 2 3
4 5 6
7 8 9
Output: [1,2,3,6,9,8,7,4,5]

Złożoność:
Czas: O(n×m) | Przestrzeń: O(1)


32) Jakie są różne sposoby sortowania tablicy? Wyjaśnij na przykładach.

Sortowanie polega na uporządkowaniu elementów w określonej kolejności. Wybór algorytmu zależy od rozmiar danych, dystrybucja i ograniczenia pamięci.

Algorytm Najlepsza sprawa Średnia sprawa Stabilny Typ przestrzeni
Bubble Sortuj Na) O(n²) Tak O (1)
Sortuj przez scalanie O (n log n) O (n log n) Tak Na)
Szybkie sortowanie O (n log n) O(n²) Nie O (log n)
Sortowanie na stosie O (n log n) O (n log n) Nie O (1)

Przykład (Python Szybkie sortowanie):

def quicksort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr)//2]
    return quicksort([x for x in arr if x < pivot]) + [x for x in arr if x == pivot] + quicksort([x for x in arr if x > pivot])

33) Wyjaśnij technikę dwóch wskaźników w tablicach.

technika dwóch punktów używa dwóch indeksów do przechodzenia przez strukturę danych z różnych końców lub z różnych prędkości, optymalizując czas i przestrzeń.

Typowe zastosowania:

  • Wykrywanie par o zadanej sumie w posortowanych tablicach.
  • Usuwanie duplikatów na miejscu.
  • Revtablice ersingowe.
  • Łączenie przedziałów.

Przykład (Połącz z Target Suma):

arr = [1,2,3,4,6], target = 6
left, right = 0, len(arr)-1
while left < right:
    s = arr[left] + arr[right]
    if s == target: print(arr[left], arr[right])
    elif s < target: left += 1
    else: right -= 1

Złożoność: Na)


34) Jak znaleźć element większościowy w tablicy?

A element większościowy pojawia się więcej niż ⌊n/2⌋ razy.

Algorytm głosowania Boyera-Moore’a rozwiązuje to w liniowym czasie i stałej przestrzeni.

Kroki algorytmu:

  1. Inicjalizacja candidate oraz count = 0.
  2. Dla każdego elementu:
    • Jeśli liczba = 0, ustaw candidate = element.
    • Zwiększanie/zmniejszanie liczby na podstawie równości.
  3. Zweryfikuj kandydata.

Przykład: [3,2,3] → Wyjście: 3

Złożoność: Na)


35) Jaka jest różnica między wyszukiwaniem binarnym a wyszukiwaniem wykładniczym?

Cecha Wyszukiwanie binarne Wyszukiwanie wykładnicze
Wymaganie Posortowana tablica Posortowana tablica
Kluczowy pomysł Podziel tablicę na pół Znajdź zakres wykładniczo przed wyszukiwaniem binarnym
Złożoność O (log n) O (log n)
Przypadek użycia Znany rozmiar Nieznane lub nieskończone tablice

Przykład:
W przypadku dużych zbiorów danych lub nieograniczonych tablic (jak w przypadku stronicowanych interfejsów API) wyniki wyszukiwania wykładniczego są wydajne.


36) Jak znaleźć k-ty najmniejszy lub największy element w tablicy?

Podejścia:

  1. Sortowanie: Sortuj i uzyskaj dostęp k-1indeks (O(n log n)).
  2. Kopiec min./maks.: Efektywne w przypadku częstych zapytań (O(n log k)).
  3. Szybki wybór (algorytm Hoare'a): Średnia O(n).

Przykład (Python używając heapq):

import heapq
arr = [3,2,1,5,6,4]
k = 2
print(heapq.nlargest(k, arr)[-1])  # 5

Przypadek użycia: Tabele wyników, najlepsze wskaźniki, analiza procentowa.


37) Jak znaleźć brakującą i powtarzającą się liczbę w tablicy od 1 do n?

Mając tablicę zawierającą liczby od 1 do n, przy czym jedna liczba brakuje, a jedna się powtarza:

Podejście 1 (matematyczne):
Użyj różnicy między sumą rzeczywistą i oczekiwaną oraz sumą kwadratów.

Podejście 2 (metoda XOR):

  1. Wykonaj operację XOR na wszystkich elementach tablicy i 1…n.
  2. Wynik daje XOR liczb brakujących i powtarzających się.
  3. Podziel używając najbardziej prawego bitu zestawu.

Złożoność: NA), Przestrzeń: O (1)

Przykład:

Input: [4,3,6,2,1,1]
Output: Missing = 5, Repeating = 1

38) Czym są liczby inwersji w tablicy i jak je obliczyć?

An inwersja jest parą (i, j) taką, że i < j oraz arr[i] > arr[j].

Podejście:

  • Naiwny: Zaznacz wszystkie pary → O(n²).
  • Zoptymalizowane (sortowanie przez scalanie): Zlicz inwersje podczas scalania → O(n log n).

Przykład:

Input: [8, 4, 2, 1]
Inversions = 6 → (8,4), (8,2), (8,1), (4,2), (4,1), (2,1)

Stosuje się w pomiar nieuporządkowania macierzy oraz systemy rankingowe.


39) Jak znaleźć medianę dwóch posortowanych tablic?

Optymalne podejście (przeszukiwanie binarne):
Podziel obie tablice tak, aby lewe połowy zawierały taką samą liczbę elementów jak prawe połowy.

Algorytm:

  1. Użyj wyszukiwania binarnego w mniejszej tablicy.
  2. Porównaj granice partycji.
  3. Zwróć medianę na podstawie wartości partycji.

Złożoność: O(log(min(n, m)))

Przykład:

A = [1,3], B = [2]
Median = 2.0

40) Jakie są zalety stosowania tablic zamiast list powiązanych?

Czynnik Szyk Połączona lista
Pamięć Przyległy Nieciągły
Czas dostępu O (1) Na)
Wstawianie/usuwanie Drogi Wydajny
Lokalizacja skrytki Doskonały Słaby
Nad głową żaden Dodatkowe miejsce na wskaźnik

Wnioski:
Tablice są optymalnym rozwiązaniem w przypadku zbiorów danych o stałym rozmiarze wymagających losowego dostępu, natomiast listy powiązane lepiej sprawdzają się w przypadku dynamicznego wstawiania i usuwania danych.


41) Jak znaleźć maksymalną sumę podtablicy kołowej?

W tablica kołowa, elementy zawijają się na końcu.

Podejście:

  1. Znajdź maksymalną sumę normalną podtablicy za pomocą Algorytm Kadane'a.
  2. Znajdź minimalną sumę podtablicy.
  3. Wynik = max(normal_max, total_sum - min_subarray).

Przypadek skrajny: Jeśli wszystkie elementy są ujemne, zwraca maksymalny element.

Przykład:

Input: [5, -2, 3, 4]
Normal Max = 10, Circular Max = 12 → Output = 12

Złożoność: Na)


42) Jak wyszukać element w obróconej, posortowanej tablicy?

Użyj zmodyfikowane wyszukiwanie binarne aby znaleźć punkt zwrotny i dostosować porównania.

Algorytm:

  1. Znajdź środek = (niski + wysoki) / 2.
  2. Sprawdź, czy arr[mid] == target.
  3. Jeżeli lewa połowa jest posortowana → szukaj po lewej; w przeciwnym wypadku, po prawej.

Przykład:

Input: [4,5,6,7,0,1,2], target = 0
Output: Index = 4

Złożoność czasowa: O (log n)


43) Wyjaśnij podejście programowania dynamicznego dla „Podciągu rosnącego o maksymalną sumę”.

Celem jest znalezienie maksymalnej sumy rosnącego podciągu.

Algorytm:

  1. Inicjalizacja dp[i] = arr[i].
  2. Dla każdego i, sprawdź poprzednie elementy j < i:
    • If arr[j] < arr[i], następnie dp[i] = max(dp[i], arr[i] + dp[j]).
  3. Zwróć maksymalną wartość w dp.

Przykład:

Input: [1, 101, 2, 3, 100, 4, 5]
Output: 106 (1 + 2 + 3 + 100)

Czas: O(n²) | Przestrzeń: Na)


44) Czym jest „pułapka”ping Problem „wody deszczowej” i jak go rozwiązać?

Ten klasyczny problem tablicowy polega na pytaniu, ile wody może zostać zatrzymane między prętami po opadach deszczu.

Podejście (dwa wskaźniki):

  1. Inicjalizacja left, right, left_max, right_max.
  2. Przesuń wskaźniki do środka, aktualizując uwięzioną wodę = min(left_max, right_max) - height[i].

Przykład:

Input: [0,1,0,2,1,0,1,3,2,1,2,1]
Output: 6
Podejście Czas Typ przestrzeni
Brutalna siła O(n²) O (1)
Programowanie dynamiczne Na) Na)
Dwa wskaźniki Na) O (1)

45) Jak znaleźć najdłuższą podtablicę, której suma jest równa zeru?

Algorytm (mapa skrótów):

  1. Zainicjuj mapę skrótów, aby zapisać sumy prefiksów.
  2. Jeżeli ponownie pojawi się ta sama suma prefiksów, podtablica pomiędzy indeksami będzie miała sumę zerową.

Przykład:

Input: [15, -2, 2, -8, 1, 7, 10, 23]
Output: Length = 5 (Subarray [-2, 2, -8, 1, 7])

Złożoność: Na)


46) Jaka jest różnica pomiędzy płytkim i głębokim spłaszczaniem tablic wielowymiarowych?

Typ Definicja Przykład
Płytkie spłaszczenie Spłaszcza tylko jeden poziom [[1,2],[3,[4]]] → [1,2,3,[4]]
Głębokie spłaszczanie Całkowicie spłaszcza wszystkie zagnieżdżone tablice [[1,2],[3,[4]]] → [1,2,3,4]

Przykład (Python):

import itertools
shallow = list(itertools.chain.from_iterable(arr))

Przypadek użycia: Przydatne przy oczyszczaniu danych i hierarchicznej normalizacji danych.


47) Jak znaleźć element równowagi w macierzy (tablicy 2D)?

An element równowagi w macierzy jest elementem, którego sumy wierszy i kolumn są zrównoważone.

Algorytm:

  1. Wstępnie oblicz sumy wierszy i kolumn.
  2. Dla każdego elementu sprawdź, czy row_sum[i] - arr[i][j] == col_sum[j] - arr[i][j].

Przykład:

Matryca:

Matrix:
2 7 5
3 1 1
4 6 8
Output: Element 1 at (1,1)

Złożoność: O(n²)


48) Jak podzielić tablicę na dwa podzbiory o równej sumie?

To jest problem sumy podzbiorów, rozwiązany za pomocą Programowanie dynamiczne.

Podejście:

  1. Oblicz sumę całkowitą.
  2. Jeśli nieparzyste → zwróć False.
  3. Utwórz tabelę DP, aby sprawdzić, czy podzbiór zawiera sum/2 istnieje.

Przykład:

Input: [1,5,11,5]
Output: True (Subsets: [1,5,5] and [11])

Czas: O(n × suma/2) | Przestrzeń: O(suma/2)


49) Jak obrócić matrycę o 90 stopni zgodnie z ruchem wskazówek zegara?

Algorytm:

  1. Transponuj macierz.
  2. Reverse każdy rząd.

Przykład:

Input:
1 2 3
4 5 6
7 8 9
Output:
7 4 1
8 5 2
9 6 3

Złożoność: O(n²), Na miejscu.

Stosuje się w przetwarzanie obrazu oraz transformacje wizualizacji danych.


50) Jakie są najczęstsze zastosowania tablic w świecie rzeczywistym?

Tablice stanowią podstawę wielu systemów obliczeniowych i rzeczywistych.

Aplikacje:

  • Indeksowanie baz danych: Przechowywanie i sortowanie rekordów.
  • Nauczanie maszynowe: Wektory cech, macierze i tensory.
  • Przetwarzanie obrazu: Dane pikselowe 2D i 3D.
  • OperaSystemy tingu: Pamięć i harmonogramowanie procesów.
  • Sieć: Buforowanie i trasowanie pakietów.
  • Gry: Stan gracza trackról i siatki.
Domena Rola tablicy
AI / ML Reprezentacja tensorów i macierzy
DBMS Indeksowanie i optymalizacja wyszukiwania
Systemy wbudowane Dane czujnika w czasie rzeczywistym
Cloud Computing Tablice rozkładu obciążenia

Tablice zapewniają podstawa efektywnej organizacji danych, obliczeń i skalowalności.


🔍 Najczęściej zadawane pytania podczas rozmów kwalifikacyjnych z uwzględnieniem rzeczywistych scenariuszy i strategicznych odpowiedzi

1) Czym jest tablica i czym różni się od innych struktur danych?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną chce sprawdzić Twoją podstawową wiedzę na temat tablic, w tym ich przeznaczenia, struktury i różnic w stosunku do innych typów danych, takich jak listy powiązane lub mapy skrótów.

Przykładowa odpowiedź:
„Tablica to zbiór elementów przechowywanych w ciągłych lokalizacjach pamięci, do których dostęp można uzyskać za pomocą indeksu. W przeciwieństwie do list powiązanych, tablice zapewniają stały dostęp do elementów (O(1)), ale wymagają stałego rozmiaru zdefiniowanego w momencie tworzenia. To sprawia, że ​​są wydajne w przypadku operacji odczytu, ale mniej elastyczne w przypadku wstawiania i usuwania elementów.”


2) Jak efektywnie znaleźć największy i najmniejszy element tablicy?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną chce sprawdzić Twoje umiejętności myślenia algorytmicznego i optymalizowania wyników.

Przykładowa odpowiedź:
„Aby sprawnie znaleźć zarówno największy, jak i najmniejszy element tablicy, musiałbym przejść przez tablicę raz,ping track bieżącego maksimum i minimum. To podejście ma złożoność czasową O(n) i złożoność przestrzenną O(1), co jest optymalne dla tego problemu.”


3) Opisz, w jaki sposób usuniesz duplikaty z nieposortowanej tablicy.

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną chce ocenić Twoją wiedzę na temat manipulacji tablicami i struktur danych, które mogą okazać się pomocne w realizacji tego zadania.

Przykładowa odpowiedź:
„Użyłbym zestawu skrótów do przechowywania unikatowych elementów podczas iterowania po tablicy. Jeśli element jest już w zestawie, pominąłbym go; w przeciwnym razie dodałbym go. Ta metoda zapewnia efektywne usuwanie duplikatów ze złożonością czasową O(n) i złożonością przestrzenną O(n)”.


4) Czy potrafisz wyjaśnić, jak działa sortowanie tablic i wymienić kilka powszechnie stosowanych algorytmów?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną oczekuje znajomości różnych algorytmów sortowania i przypadków ich użycia.

Przykładowa odpowiedź:
Sortowanie tablic można osiągnąć za pomocą różnych algorytmów, takich jak sortowanie szybkie, sortowanie przez scalanie i BubblSortowanie. Szybkie sortowanie jest wydajne w przypadku przeciętnych przypadków o złożoności O(n log n), natomiast sortowanie przez scalanie jest preferowane w przypadku dużych zbiorów danych ze względu na swoją stabilność. BubblSortowanie, mimo że proste, jest rzadko używane ze względu na wydajność O(n²).


5) Opowiedz mi o sytuacji, w której optymalizowałeś program intensywnie wykorzystujący tablice.

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną chce dowiedzieć się, w jaki sposób podchodzisz do rozwiązywania problemów i potrafisz poprawić swoją wydajność.

Przykładowa odpowiedź:
„Na poprzednim stanowisku optymalizowałem skrypt przetwarzania danych, który opierał się na wielu zagnieżdżonych pętlach na tablicach. Dzięki wdrożeniu podziału tablic i wykorzystaniu wbudowanych operacji wektorowych skróciłem czas wykonania o prawie 60 procent, co znacząco poprawiło responsywność systemu”.


6) Jak sobie poradzisz z błędem indeksowania tablicy poza jej zakresem?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną sprawdza Twoją wiedzę na temat obsługi błędów i bezpiecznych praktyk kodowania.

Przykładowa odpowiedź:
„Upewniłbym się, że wszystkie odwołania do indeksów są weryfikowane przed ich użyciem, sprawdzając, czy mieszczą się w zakresie długości tablicy. Dodatkowo zaimplementowałbym mechanizmy try-catch lub równoważne metody obsługi błędów, aby płynnie zarządzać nieoczekiwanymi błędami wykraczającymi poza zakres.”


7) Jak odwrócić tablicę bez użycia dodatkowej pamięci?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną chce ocenić Twoją wydajność algorytmiczną i zrozumienie operacji na miejscu.

Przykładowa odpowiedź:
„Użyłbym dwóch wskaźników: jednego zaczynającego się na początku tablicy, a drugiego na końcu. Poprzez zamianęping elementy w tych pozycjach i przesuwając oba wskaźniki w stronę środka, można odwrócić tablicę w miejscu ze złożonością czasową O(n) i złożonością przestrzenną O(1).”


8) Opisz sytuację, w której musiałeś zarządzać dużym zbiorem danych tablicowych. W jaki sposób zapewniłeś wydajność i dokładność?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną chce ocenić Twoją umiejętność zarządzania rzeczywistymi danymi i optymalizacji wydajności.

Przykładowa odpowiedź:
„W poprzedniej pracy pracowałem z dużymi tablicami liczbowymi do analizy danych finansowych. Aby utrzymać wydajność, stosowałem efektywne techniki zarządzania pamięcią i przetwarzanie wsadowe. Wykorzystywałem również tablice NumPy do wykonywania operacji wektorowych, co poprawiło zarówno dokładność, jak i szybkość wykonywania.”


9) Jakie kroki podejmiesz, aby wyszukać konkretną wartość w posortowanej tablicy?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną oczekuje od Ciebie wykazania się znajomością algorytmów wyszukiwania.

Przykładowa odpowiedź:
„W przypadku posortowanej tablicy użyłbym algorytmu wyszukiwania binarnego, który wielokrotnie dzieli przedział wyszukiwania na pół. To podejście redukuje złożoność czasową do O(log n), co czyni je znacznie wydajniejszym niż wyszukiwanie liniowe w dużych zbiorach danych”.


10) Jaką rolę odgrywają tablice w rozwiązywaniu rzeczywistych problemów w rozwoju oprogramowania?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną chce dowiedzieć się, w jaki sposób łączysz wiedzę techniczną z praktycznym zastosowaniem.

Przykładowa odpowiedź:
„Macierze są fundamentalne w rozwoju oprogramowania, ponieważ wspierają efektywne przechowywanie i wyszukiwanie danych. Na przykład, na moim ostatnim stanowisku, wykorzystywałem tablice do implementacji mechanizmów buforowania i sortowania danych w panelach analitycznych. Poprawiło to dostępność danych i skróciło czas odpowiedzi na zapytania”.

Podsumuj ten post następująco: