50 найпопулярніших запитань і відповідей на інтерв’ю (2026)
Готуєтеся до співбесіди в Array? Настав час зосередитися на питаннях, які можуть вам поставити. Розуміння ключового слова {{keyword}} допомагає кандидатам ефективно розкрити аналітичне мислення, логіку та вміння вирішувати проблеми.
Масиви формують основу технічного та професійного досвіду програмістів. Від новачків до старших спеціалістів, їх володіння демонструє сильні технічні знання та базовий досвід роботи з даними. Роботодавці цінують такі навички під час сесій запитань та відповідей,ping Кандидати успішно складають звичайний, просунутий або прямий раунди, впевнено аналізуючи та маючи практичні навички.
Ґрунтуючись на думках понад 85 технічних лідерів, менеджерів та фахівців, ця колекція охоплює різноманітні точки зору з різних галузей, гарантуючи, що кожна тема масиву відображає справжні очікування щодо найму та реальні стандарти оцінювання кодування.

Найпопулярніші запитання та відповіді на співбесіді з Array
1) Поясніть, що таке масив і чим він відрізняється від інших структур даних.
Масив — це безперервний блок пам'яті, який зберігає кілька елементів одного типу даних. Він дозволяє доступ до будь-якого елемента в постійному часі за його індексом, що робить його однією з найефективніших структур для довільного доступу. На відміну від зв'язаних списків, масиви мають фіксований розмір і не вимагають додаткових витрат на зберігання покажчиків. Масиви є кращими, коли кількість елементів відома заздалегідь, тоді як динамічні структури, такі як списки або вектори, використовуються, коли очікується часта зміна розміру.
| особливість | масив | Зв’язаний список |
|---|---|---|
| Розподіл пам'яті | Суміжний | Несуміжні |
| Час доступу | O (1) | О (п) |
| Вставка/видалення | Дорого | Ефективний |
| Накладні витрати на пам'ять | низький | Високі (вказівники) |
👉 Безкоштовне завантаження PDF: Запитання та відповіді для співбесіди Array
2) Які існують різні типи масивів? Наведіть приклади.
Масиви класифікуються за їх розмірністю та використанням. Основні типи включають:
- Одновимірний масив: Зберігає елементи лінійно, наприклад,
int arr[5] = {1,2,3,4,5}. - Двовимірний масив: Представляє табличні дані, наприклад, матриці.
- Багатовимірний масив: Вищі розмірності, часто використовуються в симуляціях або обробці зображень.
- Динамічні масиви: Автоматично змінювати розмір при додаванні елементів, наприклад,
ArrayListin Java,vectorin C++.
| тип | Структура | Приклад |
|---|---|---|
| 1D | Лінійний | [1, 2, 3] |
| 2D | Матриця | [[1, 2], [3, 4]] |
| Dynamic | Зміна розміру | std::vector<int> |
3) Як знайти найбільший та найменший елементи в масиві?
Цю проблему часто вирішують за допомогою лінійного обходу. Ви підтримуєте дві змінні — одну для мінімуму, а іншу для максимуму — та оновлюєте їх під час ітерації.
Алгоритм:
- форматувати
minтаmaxз першим елементом. - Пройдіться по масиву та порівняйте кожен елемент.
- Оновити
minormaxвідповідно.
Приклад (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;
}
Складність часу: O(n).
4) Які переваги та недоліки масивів?
Масиви забезпечують високу продуктивність для довільного доступу, але мають фіксований розмір та потребують дорогої зміни розміру.
| Аспект | Переваги | Недоліки |
|---|---|---|
| продуктивність | Швидка індексація (O(1)) | Повільна вставка/видалення (O(n)) |
| пам'ять | Компактне зберігання | Статичний розподіл розміру |
| Реалізація | Простий синтаксис | Безмежна перевірка деякими мовами |
| Використовуйте Case | Підходить для фіксованих наборів даних | Неефективно для частих модифікацій |
5) Опишіть різницю між статичними та динамічними масивами.
A статичний масив має фіксований розмір, який визначається під час компіляції, тоді як a динамічний масив можуть збільшуватися або зменшуватися під час виконання. Статичні масиви ефективні в пам'яті, але жорсткі, тоді як динамічні масиви забезпечують гнучкість з невеликими витратами на зміну розміру.
| особливість | Статичний масив | Динамічний масив |
|---|---|---|
| Розмір | Виправлено | Змінна |
| пам'ять | Стек | купа |
| Приклад | int arr[5]; |
std::vector<int> |
| Зміна розміру | Не підтримується | Підтриманий |
Приклад використання:
Використовуйте статичні масиви у вбудованих системах та динамічні масиви для колекцій з непередбачуваним розміром.
6) Як можна інвертувати значення масиву на місці?
RevВидалення масиву на місці передбачає замінуping елементи з обох кінців рухаються до центру.
Алгоритм:
- Ініціалізувати два вказівники:
start = 0таend = n - 1. - Поміняти місцями елементи
arr[start]таarr[end]. - Збільшення
startі зменшенняendпоки вони не зустрінуться.
Приклад (Python):
arr = [1, 2, 3, 4, 5] arr.reverse() # Built-in method # or manually arr = arr[::-1]
Складність часу: O(n), Складність простору: О(1).
7) Яка різниця між зубчастим масивом та багатовимірним масивом?
A зубчастий масив — це масив масивів, де внутрішні масиви можуть мати різну довжину, тоді як a багатовимірний масив має однакові розміри рядків і стовпців.
| особливість | Зубчастий масив | Багатовимірний масив |
|---|---|---|
| Структура | Нерегулярні (вкладені масиви) | Прямокутний (матричний) |
| пам'ять | Несуміжні | Суміжний |
| Доступ | arr[i][j] |
arr[i][j] |
| Приклад | int[][] jagged = {{1,2}, {3,4,5}}; |
int[,] matrix = {{1,2}, {3,4}}; |
Зубчасті масиви ефективніше використовують пам'ять, коли дані нерівномірні.
8) Як знайти пропущене число в масиві від 1 до n?
Ця задача використовує математичні властивості натуральних чисел.
Підхід 1 (Формула суми):
Сума перших n натуральні числа = n*(n+1)/2.
нижчеtract сума елементів масиву з цього загального числа.
Підхід 2 (виключаюче АБО):
Виконайте операцію XOR для всіх елементів з числами від 1 до n. Отриманим числом є відсутнє число.
приклад:
Для
[1,2,4,5,6] (n=6):
Очікувана сума = 21, Фактична сума = 18 → Відсутнє = 3.
Складність часу: O(n), Складність простору: О(1).
9) Які існують різні способи видалення дублікатів з масиву?
Існує кілька підходів залежно від мови та обмежень:
- Використання HashSet: Зберігайте лише унікальні елементи.
- Використання сортування: Відсортуйте масив та видаліть сусідні дублікати.
- Використання карти частот: Track підрахунків кожного елемента.
Приклад (Java):
Set<Integer> unique = new HashSet<>(Arrays.asList(arr));
| Підхід | Time | Простір |
|---|---|---|
| HashSet | О (п) | О (п) |
| Сортування | O (n журнал n) | O (1) |
| частота | О (п) | О (п) |
10) Як знайти другий за величиною елемент у масиві?
Ви можете знайти другий за величиною елемент, використовуючи один обхід, зберігаючи дві змінні.
Алгоритм:
- форматувати
firstтаsecondasINT_MIN. - Пройдіться по масиву.
- Оновити обидва, коли знайдено більше значення.
Приклад (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;
}
}
Складність часу: O(n), Складність простору: О(1).
11) Як можна повернути масив на 'k' позицій? Поясніть різні підходи.
Обертання масиву циклічно зміщує елементи. Існують три основні методи щоб досягти цього:
- Використання тимчасового масиву: Скопіюйте перші k елементів і додайте їх в кінець після зсуву інших.
- використання RevАлгоритм ersal: Reverse три частини масиву – перша частина, друга частина, потім весь масив.
- Використання алгоритму жонглювання: На основі НСД n та k (ефективно в O(n)).
Приклад (поворот праворуч на 2):
Input: [1,2,3,4,5] Output: [4,5,1,2,3]
| Метод | Time | Простір | Опис |
|---|---|---|---|
| Тимчасовий масив | О (п) | Гаразд) | Простий та інтуїтивно зрозумілий |
| Reversal | О (п) | O (1) | На місці та ефективно |
| Жонглювання | О (п) | O (1) | На основі циклів НСД |
12) Що таке підмасив і чим він відрізняється від підпослідовності?
A підмасив є суміжною частиною масиву, тоді як a підпослідовність підтримує порядок, але може пропускати елементи.
| властивість | Підмасив | Підпослідовність |
|---|---|---|
| Суміжний | Так | Немає |
| Порядок збережено | Так | Так |
| Приклад (з [1,2,3]) | [1,2], [2,3] | [1,3], [2,3] |
приклад:
Дано масив [1,2,3], загальна кількість підмасивів = n*(n+1)/2 = 6.
Підпослідовності, з іншого боку, це 2ⁿ - 1 = 7 непорожні комбінації.
13) Як знайти підмасив максимальної суми?
Команда Алгоритм Кадане є найефективнішим способом знаходження суміжного підмасиву з максимальною сумою.
Кроки:
- форматувати
max_current = max_global = arr[0]. - Перебираємо елементи.
- Оновити
max_current = max(arr[i], arr[i] + max_current). - Track – глобальний максимум.
приклад:
Вхідний сигнал: [-2,1,-3,4,-1,2,1,-5,4] → Вихід: 6 (підмасив [4,-1,2,1]).
Складність:
O(n) часу, O(1) простору.
14) Як можна об'єднати два відсортовані масиви без використання зайвого простору?
Об'єднання двох відсортованих масивів на місці, ідея полягає в тому, щоб порівнювати з кінця обох масивів.
Підхід:
- Починати з останнього дійсного елемента обох масивів.
- Порівняйте та перемістіть більший у кінець об'єднаного простору.
- Повторюйте, доки всі елементи не будуть об'єднані.
Приклад (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--];
}
Складність часу: O(m+n).
15) Які існують різні способи пошуку елемента в масиві?
| Метод | тип | Складність часу | Приклад використання |
|---|---|---|---|
| Лінійний пошук | Несортований | О (п) | Загальний пошук |
| Двійковий пошук | Сортований | O (журнал n) | Ефективний пошук |
| Хешування | Невпорядкований | Середнє значення O(1) | Великі набори даних |
Приклад (бінарний пошук – 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) Поясніть різницю між поверхневим копіюванням та глибоким копіюванням у масивах.
A дрібну копію копіює посилання на оригінальні елементи, тоді як глибока копія дублює всі дані на нові місця в пам'яті.
| Тип копіювання | Незалежність даних | Приклад |
|---|---|---|
| Дрібний | Немає | arr_copy = arr |
| глибока | Так | arr_copy = arr[:] (Python) |
приклад:
Зміна поверхневої копії відображається в оригінальному масиві; глибока копія – ні.
17) Як знайти дублікати в масиві без використання зайвого простору?
Підхід 1 (Сортування): Сортувати та перевірити суміжні елементи.
Підхід 2 (метод заперечення для значень 1–n): Позначте відвідані індекси, заперечуючи елемент за цим індексом.
Підхід 3 (виявлення циклу Флойда): Розглянути масив як зв'язаний список та знайти цикл (для повторюваних елементів у діапазоні [1..n]).
приклад:
масив [3,1,3,4,2] → Дублікат = 3.
Час: O(n), Простір: О(1).
18) Що таке розріджені масиви та їхні переваги?
A розріджений масив містить переважно нульові або стандартні значення. Замість того, щоб зберігати всі елементи, ми зберігаємо лише ненульові записи з їхніми індексами.
переваги:
- Зберігає пам'ять.
- Ефективно для великих наборів даних, таких як матриці або частоти термінів документів.
| тип | Приклад | Використовуйте Case |
|---|---|---|
| Щільний масив | [0,1,0,2,3] |
Невеликі дані |
| Розріджений масив | {1:1, 3:2, 4:3} |
Великі розріджені дані |
приклад: Використовується в моделях машинного навчання (матриці TF-IDF).
19) Як можна ефективно знайти перетин двох масивів?
Перетин можна знайти за допомогою методів хешування або сортування.
- Використання HashSet: Додайте елементи першого масиву, а потім перевірте належність для другого.
- Використання двох покажчиків: Працює для відсортованих масивів.
Приклад (Python):
intersection = list(set(arr1) & set(arr2))
Складність:
- Хеш-набір: O(n)
- Два покажчики: O(n log n) через сортування.
20) Поясніть різницю між порядком за рядками та порядком за стовпцями в масивах.
Це порядки зберігання пам'яті, що використовуються для багатовимірних масивів.
| Концепція | Рядовий майор (C/C++) | Колонка-основна (Fortraн, MATLAB) |
|---|---|---|
| Порядок зберігання | Ряд за рядком | Колонка за колонкою |
| Формула адреси | Base + ((i * cols) + j) * size |
Base + ((j * rows) + i) * size |
| Перевага | Швидше для проходження рядків | Швидше для обходу стовпців |
приклад:
Для двовимірного масиву A[2][3], ряд великих магазинів [A[0][0], A[0][1], A[0][2], A[1][0], ...].
21) Що таке метод префіксної суми та як він використовується в масивах?
Команда префіксна сума Метод передбачає попереднє обчислення кумулятивних сум масиву для ефективної відповіді на запити діапазону.
Концепція:
prefix[i] = prefix[i-1] + arr[i]
Тоді, щоб отримати суму елементів від l до r, використовуйте:
sum(l, r) = prefix[r] - prefix[l-1]
приклад:
Масив = [2, 3, 5, 7, 1]
Префікс = [2, 5, 10, 17, 18]
Сума(2,4) = prefix[4] - prefix[1] = 15
Область застосування:
Використовується в запитах сумування підмасивів, кумулятивних таблицях частот та конкурентному програмуванні.
Складність:
Попередня обробка: O(n), Запит: O(1)
22) Як метод ковзного вікна покращує продуктивність масиву?
Команда розсувне вікно Метод використовується для ефективного вирішення задач, що включають суміжні сегменти (підмасиви).
Ідея: Замість перерахунку суми або умови для кожного вікна, оновіть результат, додавши наступний елемент і видаливши перший.
Приклад проблеми:
Знайдіть максимальну суму підмасиву розміром k.
Алгоритм:
- Обчисліть суму перших
kелементи. - Переміщуйте вікно по одному елементу за раз.
- Додайте новий елемент, видаліть перший та track максимум.
Складність часу: O(n) — набагато швидше, ніж наївний підхід O(n×k).
Область застосування:
Використовується в таких задачах, як підмасив максимального середнього значення, найдовший підрядок або перше від'ємне число в кожному вікні.
23) Яка різниця між масивом і вказівником у мові C?
| особливість | масив | Покажчик |
|---|---|---|
| Визначення | Збір подібних елементів даних | Змінна, що зберігає адресу пам'яті |
| Розподіл пам'яті | Суміжний | Динамічний або довільний |
| Розмір | Виправлено | Можна змінювати розмір |
| Приклад | int a[5]; |
int *p; |
Ключова відмінність:
Ім'я масиву діє як константний вказівник, але вказівник може динамічно вказувати будь-куди.
приклад:
int arr[3] = {1,2,3};
int *ptr = arr; // ptr points to first element
24) Як можна знайти індекс рівноваги в масиві?
An індекс рівноваги це положення, де сума елементів ліворуч дорівнює сумі елементів праворуч.
Алгоритм:
- Обчисліть загальну суму масиву.
- Обведіть та збережіть ліву суму.
- If
(total_sum - left_sum - arr[i]) == left_sum, повернути індекс.
приклад:
Масив: [1, 3, 5, 2, 2] → Індекс = 2 (оскільки ліва сума = права сума = 4)
Складність: O(n), Простір: O (1)
25) Що таке розріджені матриці та як їх ефективно зберігати?
A розріджена матриця містить переважно нулі. Для економії пам'яті зберігаються лише ненульові елементи та їхні індекси.
Способи зберігання:
- Список координат (COO): Зберегти (рядок, стовпець, значення).
- Стиснутий розріджений рядок (CSR): Три масиви:
values,col_index,row_pointer. - Словник ключів (DOK): Хеш-карта (рядок, стовпець) → значення.
| Метод | Ефективність пам'яті | Приклад використання |
|---|---|---|
| Головний операційний директор | Помірна | Загальне зберігання |
| КСВ | Високий | Числові обчислення |
| DOK | гнучкий | Динамічне вставлення |
Широко використовується в навчання за допомогою машини (TF-IDF, матриці суміжності графів).
26) Як переставити масив так, щоб парні та непарні числа чергувалися?
Мета полягає в тому, щоб чергувати парні та непарні числа, зберігаючи їх відносний порядок.
Алгоритм:
- Розділіть парні та непарні масиви.
- Об'єднуйте по черзі, починаючи з парних або непарних чисел.
- Якщо один тип закінчиться, додайте решту.
приклад:
Input: [3, 6, 12, 1, 5, 8] Output: [6, 3, 12, 1, 8, 5]
Складність: О (п)
27) Поясніть різницю між обертанням масиву та зміщенням масиву.
| Operaції | Обертання | ShiftІНГ |
|---|---|---|
| Визначення | Елементи рухаються по колу | Елементи рухаються, звільнені місця заповнюються (наприклад, 0) |
| Приклад | [1,2,3,4] → [3,4,1,2] |
[1,2,3,4] → [0,1,2,3] |
| Дані втрачені | Немає | Так |
| Використання | Циклічні перебудови | Реалізації черг |
У підсумку:
Обертання є оборотним; зміщення зазвичай ні.
28) Як можна знайти максимальний добуток підмасиву?
Схоже на алгоритм Кадане, але ви track як максимальних, так і мінімальних добутків через від'ємні значення.
Алгоритм:
- форматувати
max_ending_here = min_ending_here = arr[0]. - Виконуйте ітерацію та оновлення на основі поточного елемента.
- Track
max_so_far.
приклад:
Вхідний сигнал: [2,3,-2,4] → Вихід: 6 (підмасив [2,3])
Складність: O(n), Простір: O (1)
29) Як можна ефективно підрахувати кількість підмасивів із заданою сумою?
Підхід (Сума префіксів + Хеш-карта):
- Зберігайте поточну суму під час ітерації.
- Для кожної префіксної суми перевірте, чи
(current_sum - target)існує на хеш-карті. - Збільште кількість відповідно.
приклад:
arr = [10,2,-2,-20,10], target = -10 Output = 3 subarrays
Складність часу: О (п)
Складність простору: О (п)
30) Що таке маніпулювання бітами в задачах з масивами, і де воно застосовується?
Маніпуляції бітами включає виконання операцій, таких як І, АБО, XOR та зсуви, для ефективного вирішення задач.
Поширені програми:
- Знаходження одного неповторюваного елемента за допомогою операції XOR.
- Перевірка існування підмножини за допомогою бітового маскування.
- Представлення множин у вигляді бітових векторів.
приклад:
Знайдіть елемент, який з'являється один раз, тоді як інші з'являються двічі:
int res = 0; for (int num : arr) res ^= num;
переваги:
- Постійний простір
- Швидкі логічні обчислення
31) Як обійти матрицю у спіральному порядку?
A спіральний обхід відвідує всі елементи матриці шар за шаром за годинниковою стрілкою.
Алгоритм:
- Визначте чотири межі:
top,bottom,leftтаright. - Переміщення зліва → справа, зверху → знизу, справа → ліворуч і знизу → зверху.
- Зменшуйте межі після кожного проходу, доки не будуть покриті всі елементи.
приклад:
Input: 1 2 3 4 5 6 7 8 9 Output: [1,2,3,6,9,8,7,4,5]
Складність:
Час: O(n×m) | Простір: O(1)
32) Які існують різні способи сортування масиву? Поясніть на прикладах.
Сортування переставляє елементи в певному порядку. Вибір алгоритму залежить від обмеження розміру даних, розподілу та пам'яті.
| Алгоритм | Найкращий випадок | Середній випадок | Стабільний | Простір |
|---|---|---|---|---|
| Bubble Сортування | О (п) | O (n²) | Так | O (1) |
| Об’єднати сортування | O (n журнал n) | O (n журнал n) | Так | О (п) |
| Швидке сортування | O (n журнал n) | O (n²) | Немає | O (журнал n) |
| Сортування купи | O (n журнал n) | O (n журнал n) | Немає | O (1) |
Приклад (Python Швидке сортування):
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) Поясніть метод двох вказівників у масивах.
Команда техніка двоочкових кидків використовує два індекси для проходження структури даних з різних кінців або швидкостей, оптимізуючи час і простір.
Загальне використання:
- Виявлення пар із заданою сумою в відсортованих масивах.
- Видалення дублікатів на місці.
- Revмасиви Ерсінга.
- Об'єднання інтервалів.
Приклад (Поєднайте з Target Сума):
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
Складність: О (п)
34) Як можна знайти мажоритарний елемент у масиві?
A елемент більшості з'являється більше ніж ⌊n/2⌋ разів.
Алгоритм голосування Бойєра-Мура вирішує це в лінійному часі та сталому просторі.
Кроки алгоритму:
- форматувати
candidateтаcount = 0. - Для кожного елемента:
- Якщо кількість = 0, встановити
candidate = element. - Збільшення/зменшення кількості на основі рівності.
- Якщо кількість = 0, встановити
- Перевірте кандидата.
приклад: [3,2,3] → Вихід: 3
Складність: О (п)
35) Яка різниця між бінарним пошуком та експоненціальним пошуком?
| особливість | Двійковий пошук | Експоненціальний пошук |
|---|---|---|
| Вимога | Відсортований масив | Відсортований масив |
| Ключова ідея | Розділити масив навпіл | Знайти діапазон експоненціально перед бінарним пошуком |
| складність | O (журнал n) | O (журнал n) |
| Використовуйте Case | Відомий розмір | Невідомі або нескінченні масиви |
приклад:
Для великих наборів даних або необмежених масивів (наприклад, API з розбивкою на сторінки) експоненціальний пошук ефективно змінює діапазон знахідок.
36) Як можна знайти k-й найменший або найбільший елемент у масиві?
Підходи:
- Сортування: Сортування та доступ
k-1-й індекс (O(n log n)). - Мін./Макс. купа: Ефективний для частих запитів (O(n log k)).
- Швидкий вибір (алгоритм Хоара): Середнє значення O(n).
Приклад (Python використовуючи heapq):
import heapq arr = [3,2,1,5,6,4] k = 2 print(heapq.nlargest(k, arr)[-1]) # 5
Корпус: Таблиці лідерів, показники найвищих результатів, аналіз процентилів.
37) Як знайти пропущене та повторюване число в масиві від 1 до n?
Дано масив, що містить числа від 1 до n, одне з яких пропущено, а одне повторюється:
Підхід 1 (математичний):
Використайте різницю між фактичною та очікуваною сумою та сумою квадратів.
Підхід 2 (метод XOR):
- Виключаюче АБО всіх елементів масиву та 1…n.
- Результат дає XOR відсутніх та повторюваних чисел.
- Ділення з використанням крайнього правого встановленого розряду.
Складність: O(n), Простір: O (1)
приклад:
Input: [4,3,6,2,1,1] Output: Missing = 5, Repeating = 1
38) Що таке кількість інверсій у масиві та як її обчислити?
An інверсія — це пара (i, j) така, що i < j та arr[i] > arr[j].
Підхід:
- Наївний: Перевірте всі пари → O(n²).
- Оптимізовано (сортування злиттям): Підрахунок інверсій під час об'єднання → O(n log n).
приклад:
Input: [8, 4, 2, 1] Inversions = 6 → (8,4), (8,2), (8,1), (4,2), (4,1), (2,1)
Використовується в розлад вимірювальної решітки та системи рейтингу.
39) Як можна знайти медіану двох відсортованих масивів?
Оптимальний підхід (бінарний пошук):
Розділіть обидва масиви так, щоб ліві половини містили таку ж кількість елементів, як і праві половини.
Алгоритм:
- Використовуйте бінарний пошук для меншого масиву.
- Порівняйте межі розділів.
- Повернути медіану на основі значень розділів.
Складність: O(log(мін(n, м)))
приклад:
A = [1,3], B = [2] Median = 2.0
40) Які переваги використання масивів над зв'язаними списками?
| Фактор | масив | Зв’язаний список |
|---|---|---|
| пам'ять | Суміжний | Несуміжні |
| Час доступу | O (1) | О (п) |
| Вставка/видалення | Дорогий | Ефективний |
| Місцевість кешу | відмінно | бідних |
| Накладні витрати | ніхто | Додаткове сховище для вказівників |
Висновок:
Масиви оптимальні для наборів даних фіксованого розміру, що потребують довільного доступу, тоді як зв'язані списки краще підходять для динамічної вставки та видалення.
41) Як знайти максимальну суму кругового підмасиву?
В круговий масив, елементи обтікають в кінці.
Підхід:
- Знайдіть нормальну максимальну суму підмасиву, використовуючи Алгоритм Кадане.
- Знайдіть мінімальну суму підмасиву.
- Результат =
max(normal_max, total_sum - min_subarray).
Крайній випадок: Якщо всі елементи від'ємні, повернути максимальний елемент.
приклад:
Input: [5, -2, 3, 4] Normal Max = 10, Circular Max = 12 → Output = 12
Складність: О (п)
42) Як знайти елемент у повернутому відсортованому масиві?
Використовувати модифікований бінарний пошук знайти точку опори та налаштувати порівняння.
Алгоритм:
- Знайдіть середину = (низьке + високе) / 2.
- Перевірте, чи є
arr[mid] == target. - Якщо ліва половина відсортована → пошук зліва; інакше, справа.
приклад:
Input: [4,5,6,7,0,1,2], target = 0 Output: Index = 4
Складність часу: O (журнал n)
43) Поясніть підхід динамічного програмування для «Підпослідовності зі зростаючою сумою».
Мета полягає в тому, щоб знайти максимальну суму зростаючої підпослідовності.
Алгоритм:
- форматувати
dp[i] = arr[i]. - Для кожного
i, перевірте попередні елементиj < i:- If
arr[j] < arr[i], Тоdp[i] = max(dp[i], arr[i] + dp[j]).
- If
- Повернути максимальне значення в
dp.
приклад:
Input: [1, 101, 2, 3, 100, 4, 5] Output: 106 (1 + 2 + 3 + 100)
Час: O(n²) | Простір: О (п)
44) Що таке «пастка»ping Проблема «дощової води» та як її можна вирішити?
Ця класична задача на масиви запитує, скільки води може затриматися між стрижнями після дощу.
Підхід (два вказівники):
- форматувати
left,right,left_max,right_max. - Переміщення вказівників всередину, оновлення кількості затриманої води =
min(left_max, right_max) - height[i].
приклад:
Input: [0,1,0,2,1,0,1,3,2,1,2,1] Output: 6
| Підхід | Time | Простір |
|---|---|---|
| Груба сила | O (n²) | O (1) |
| Динамічне програмування | О (п) | О (п) |
| Два покажчики | О (п) | O (1) |
45) Як можна знайти найдовший підмасив із сумою, що дорівнює нулю?
Алгоритм (хеш-карта):
- Ініціалізуйте хеш-карту для зберігання префіксних сум.
- Якщо та сама префіксна сума з'являється знову, підмасив між індексами має нульову суму.
приклад:
Input: [15, -2, 2, -8, 1, 7, 10, 23] Output: Length = 5 (Subarray [-2, 2, -8, 1, 7])
Складність: О (п)
46) Яка різниця між поверхневим та глибоким вирівнюванням багатовимірних масивів?
| тип | Визначення | Приклад |
|---|---|---|
| Неглибоке сплющення | Вирівнює лише один рівень | [[1,2],[3,[4]]] → [1,2,3,[4]] |
| Глибоке вирівнювання | Повністю вирівнює всі вкладені масиви | [[1,2],[3,[4]]] → [1,2,3,4] |
Приклад (Python):
import itertools shallow = list(itertools.chain.from_iterable(arr))
Корпус: Корисно для очищення даних та ієрархічної нормалізації даних.
47) Як знайти рівноважний елемент у матриці (двовимірному масиві)?
An елемент рівноваги у матриці є елемент, чий суми рядків і стовпців врівноважені.
Алгоритм:
- Попереднє обчислення сум рядків і стовпців.
- Для кожного елемента перевірте, чи
row_sum[i] - arr[i][j] == col_sum[j] - arr[i][j].
приклад:
Матриця:
Matrix: 2 7 5 3 1 1 4 6 8 Output: Element 1 at (1,1)
Складність: O (n²)
48) Як можна розбити масив на дві підмножини з однаковою сумою?
Це задача про підмножину-суму, вирішено за допомогою Динамічне програмування.
Підхід:
- Обчисліть загальну суму.
- Якщо непарне → повернути False.
- Створіть таблицю DP, щоб перевірити, чи є підмножина з
sum/2існує
приклад:
Input: [1,5,11,5] Output: True (Subsets: [1,5,5] and [11])
Час: O(n × сума/2) | Простір: O(сума/2)
49) Як повернути матрицю на 90 градусів за годинниковою стрілкою?
Алгоритм:
- Транспонуйте матрицю.
- Reverse кожен рядок.
приклад:
Input: 1 2 3 4 5 6 7 8 9 Output: 7 4 1 8 5 2 9 6 3
Складність: O(n²), На місці.
Використовується в обробка зображення та перетворення візуалізації даних.
50) Які найпоширеніші застосування масивів у реальному світі?
Масиви є основою численних обчислювальних та реальних систем.
Область застосування:
- Індексування бази даних: Зберігання та сортування записів.
- Машинне навчання: Вектори ознак, матриці та тензори.
- Обробка зображень: 2D та 3D піксельні дані.
- Operaсистеми ting: Планування пам'яті та процесів.
- Мережа: Буферизація та маршрутизація пакетів.
- Ігри: Стан гравця tracкороль і сітки.
| сфера | Роль масиву |
|---|---|
| AI / ML | Тензорне та матричне представлення |
| СУБД | Індексація та пошукова оптимізація |
| Вбудовані системи | Дані датчика в реальному часі |
| Cloud Computing | Масиви розподілу навантаження |
Масиви забезпечують основа для ефективної організації даних, обчислень та масштабованості.
🔍 Найпопулярніші запитання для співбесіди Array з реальними сценаріями та стратегічними відповідями
1) Що таке масив і чим він відрізняється від інших структур даних?
Очікується від кандидата: Інтерв'юер хоче оцінити ваше фундаментальне розуміння масивів, включаючи їхнє призначення, структуру та те, чим вони відрізняються від інших типів даних, таких як зв'язані списки або хеш-карти.
Приклад відповіді:
«Масив — це набір елементів, що зберігаються в суміжних комірках пам’яті, де до кожного елемента можна отримати доступ за допомогою індексу. На відміну від зв’язаних списків, масиви забезпечують доступ до елементів за постійний час (O(1)), але вимагають фіксованого розміру, визначеного під час створення. Це робить їх ефективними для операцій читання, але менш гнучкими для вставки та видалення».
2) Як ефективно знайти найбільший та найменший елементи в масиві?
Очікується від кандидата: Інтерв'юер хоче перевірити ваше алгоритмічне мислення та здатність оптимізувати продуктивність.
Приклад відповіді:
«Щоб ефективно знайти як найбільший, так і найменший елементи в масиві, я б перебрав масив один раз, зберігаючиping track поточного максимуму та мінімуму. Цей підхід має часову складність O(n) та просторову складність O(1), що є оптимальним для цієї задачі.
3) Опишіть, як ви видаляєте дублікати з несортованого масиву.
Очікується від кандидата: Інтерв'юер хоче оцінити ваші знання про маніпулювання масивами та структурами даних, які можуть допомогти у виконанні цього завдання.
Приклад відповіді:
«Я б використовував хеш-набір для зберігання унікальних елементів під час ітерації по масиву. Якщо елемент вже є в наборі, я б його пропустив; інакше я б його додав. Цей метод гарантує ефективне видалення дублікатів зі складністю часу O(n) та складністю простору O(n)».
4) Чи можете ви пояснити, як працює сортування масивів, і назвати кілька поширених алгоритмів?
Очікується від кандидата: Інтерв'юер очікує знайомства з різними алгоритмами сортування та варіантами їх використання.
Приклад відповіді:
«Сортування масивів можна досягти за допомогою різних алгоритмів, таких як швидке сортування, сортування злиттям та…» Bubble Сортування. Швидке сортування ефективне для середніх випадків зі складністю O(n log n), тоді як сортування злиттям є кращим для великих наборів даних через його стабільний характер. BubblСортування e, хоча й просте, рідко використовується через свою продуктивність O(n²).
5) Розкажіть мені про випадок, коли ви оптимізували програму, яка активно використовувала масиви.
Очікується від кандидата: Інтерв'юер хоче зрозуміти ваш підхід до вирішення проблем та здатність покращувати продуктивність.
Приклад відповіді:
«На попередній посаді я оптимізував скрипт обробки даних, який спирався на кілька вкладених циклів над масивами. Завдяки реалізації нарізки масивів та використанню вбудованих векторизованих операцій я скоротив час виконання майже на 60 відсотків, що значно покращило швидкість реагування системи».
6) Як би ви обробили помилку індексу масиву за межами межі?
Очікується від кандидата: Інтерв'юер перевіряє ваше розуміння обробки помилок та практик безпечного кодування.
Приклад відповіді:
«Я б забезпечив перевірку всіх звернень до індексу перед використанням, перевіряючи, чи вони знаходяться в межах діапазону довжини масиву. Крім того, я б впровадив механізми try-catch або еквівалентні методи обробки помилок для коректного керування неочікуваними помилками поза межами межі».
7) Як перевернути масив без використання додаткової пам'яті?
Очікується від кандидата: Інтерв'юер хоче оцінити вашу алгоритмічну ефективність та розуміння операцій на місці.
Приклад відповіді:
«Я б використав два вказівники: один починається з початку масиву, а інший — з кінця. За допомогою swap»ping Розташувавши елементи в цих позиціях та перемістивши обидва вказівники до центру, масив можна розгорнути на зворотному місці з часовою складністю O(n) та просторовою складністю O(1).
8) Опишіть ситуацію, коли вам довелося керувати великим масивом даних. Як ви забезпечили продуктивність і точність?
Очікується від кандидата: Інтерв'юер хоче оцінити вашу здатність справлятися з управлінням реальними даними та оптимізацією продуктивності.
Приклад відповіді:
«На попередній роботі я працював з великими числовими масивами для аналізу фінансових даних. Щоб підтримувати продуктивність, я використовував ефективні методи управління пам’яттю та пакетну обробку. Я також використовував масиви NumPy для виконання векторизованих операцій, що покращило як точність, так і швидкість виконання».
9) Які кроки ви б виконали, щоб знайти певне значення в відсортованому масиві?
Очікується від кандидата: Інтерв'юер очікує, що ви продемонструєте знання алгоритмів пошуку.
Приклад відповіді:
«Для відсортованого масиву я б використав алгоритм бінарного пошуку, який багаторазово ділить інтервал пошуку навпіл. Такий підхід зменшує часову складність до O(log n), що робить його набагато ефективнішим, ніж лінійний пошук для великих наборів даних».
10) Яку роль відіграють масиви у вирішенні реальних проблем розробки програмного забезпечення?
Очікується від кандидата: Інтерв'юер хоче зрозуміти, як ви пов'язуєте технічні знання з практичним застосуванням.
Приклад відповіді:
«Масиви є фундаментальними в розробці програмного забезпечення, оскільки вони підтримують ефективне зберігання та пошук даних. Наприклад, на моїй попередній посаді я використовував масиви для реалізації механізмів кешування та сортування даних для аналітичних панелей. Це покращило доступність даних та скоротило час відповіді на запити».
