Что такое O-нотация? Оцените сложность поиска дубликата в массиве двумя способами.
O-нотация описывает асимптотический рост числа операций при увеличении размера входа, отбрасывая константы и младшие члены. O(2n + 5) — это O(n).
Различайте три оценки: худший случай (обычно её и спрашивают), средний и лучший. Отдельно оценивается память — O(1) дополнительной памяти часто важнее скорости.
Задача: найти дубликат.
- Два вложенных цикла — время
O(n²), памятьO(1). - Сортировка и сравнение соседей — время
O(n log n), памятьO(1)при сортировке на месте. - Хеш-множество — время
O(n), памятьO(n).
function hasDuplicate(arr) {
const seen = new Set();
for (const x of arr) {
if (seen.has(x)) return true;
seen.add(x);
}
return false;
}Это и есть главный размен в алгоритмах — время против памяти. На собеседовании озвучьте оба варианта и объясните выбор.
- Что такое амортизированная сложность?
- Почему O(n log n) — нижняя граница сортировки сравнениями?