LeetCode 2996. Наименьшее отсутствующее целое число, большее суммы последовательного префикса | Р...
Shaan Labs
0:00 / 0:00
LeetCode 2996. Наименьшее отсутствующее целое число, большее суммы последовательного префикса | Р...
170 просмотров · 1 месяц назад
Shaan Labs
1,02 тыс. подписчиков
170 просмотров · 1 месяц назад
LeetCode 2996. Наименьшее недостающее целое число, большее суммы последовательного префикса — САМОЕ ПРОСТОЕ объяснение, наглядное. Найдите сумму самого длинного последовательного префикса, затем верните наименьшее целое число, отсутствующее в массиве. В этом видео решается LeetCode 2996 ДВУМЯ простыми методами: поиск в HashSet (пространство O(n)) и сканирование массива (пространство O(1)). Решите за секунды, как только увидите двухэтапный алгоритм.
Задача дает массив целых чисел с индексом 0. Префикс является последовательным, когда каждый следующий элемент равен предыдущему элементу плюс один: nums[j] равно nums[j-1]+1. Префикс, состоящий только из nums[0], всегда является последовательным. Вам нужно найти самый длинный последовательный префикс, начиная с индекса 0, вычислить его сумму, затем вернуть наименьшее целое число x, которое больше или равно этой сумме и НЕ присутствует нигде в массиве. Вот и вся задача — два шага, ничего больше.
Почему это одна из самых простых задач LeetCode: здесь нет сложной структуры данных, нет сложных рекуррентных соотношений и нет скрытых граничных случаев. Шаг 1 — это простое прямое сканирование, которое суммирует последовательные элементы до тех пор, пока не нарушится правило «плюс один». Шаг 2 начинается с суммы и проверяет, существует ли это число в массиве, увеличивая его на единицу, пока не будет найдено недостающее значение. Это недостающее значение и есть ответ.
В этом видео показаны оба принятых подхода. Метод 1 помещает каждый элемент в HashSet для проверок на наличие элементов за O(1) — чистое, быстрое и наиболее распространенное решение. Метод 2 сканирует массив внутри цикла while с флагом «найдено» — нет дополнительной структуры данных, но есть дополнительное пространство за O(1). Оба варианта решения проходят все тестовые случаи на LeetCode, на Java, и код можно скопировать напрямую.
Два визуальных пробных запуска делают это невозможным забыть. Пример 1: nums = [1,2,3,2,5]. Самый длинный последовательный префикс — [1,2,3] с суммой 6. Значение 6 отсутствует в массиве, поэтому ответ — 6. Пример 2: nums = [3,4,5,1,12,14,13]. Самый длинный последовательный префикс — [3,4,5] с суммой 12. Значения 12, 13 и 14 присутствуют, но 15 отсутствует, поэтому ответ — 15.
Временная сложность составляет O(n) для обоих методов — массив сканируется один раз. Пространственная сложность составляет O(n) для метода HashSet и O(1) для метода массива. Ограничения невелики (n до 50, значения до 50), поэтому даже самое простое решение принимается мгновенно.
Разделы (составлены на основе реального контента SRT — каждый длится более 10 секунд): 00:00 — Завязка: Сегодняшний вопрос — 2996
00:08 — Условие задачи: Наименьшее недостающее целое число
00:30 — Простое объяснение префиксной последовательности
00:59 — Суммируется только последовательная часть
01:16 — Два шага: Сумма + Наименьшее недостающее число
01:47 — Пробный запуск: [1,2,3,2,5] дает ответ 6
03:15 — Второй пример: [3,4,5,1,12,14,13] дает ответ 15
04:02 — Псевдокод: Шаг 1. Последовательная сумма
05:45 — Почему цикл прерывается, когда последовательность заканчивается
06:25 — Два метода: HashSet против сканирования массива
06:51 — Метод 1: Поиск в хэш-множестве (пространство O(n))
08:15 — Метод 2: Сканирование массива (пространство O(1))
09:53 — Код на Java: Сумма + Оба метода
11:25 — Метод 1 отправлен и принят
12:25 — Метод 2 отправлен и принят
12:38 — Заключение: Подпишитесь на ежедневные задачи
Полный код и проект: https://github.com/Shaanworkspace
Больше от Shaan Labs: Ежедневные решения LeetCode → https://github.com/Shaanworkspace/YOU... D
Часто задаваемые вопросы:
Чему равно на LeetCode 2996 Наименьшее недостающее целое число, большее, чем последовательная префиксная сумма? В задаче LeetCode 2996 нужно найти самый длинный префикс массива, где каждый элемент увеличивается ровно на 1, вычислить сумму этого префикса и вернуть наименьшее целое число, большее или равное этой сумме, которое отсутствует в массиве.
Как найти самый длинный последовательный префикс в LeetCode 2996? Начните с индекса 0 и двигайтесь вперед, пока nums[i] равно nums[i-1]+1. В момент нарушения правила плюс один префикс заканчивается. Суммируйте все элементы от индекса 0 до последнего последовательного индекса.
Каков алгоритм поиска наименьшего отсутствующего целого числа в LeetCode 2996? Сначала вычислите сумму последовательных префиксов. Затем начните с этой суммы и проверьте, существует ли значение в массиве, увеличивая его на единицу каждый раз. Первое значение, отсутствующее в массиве, является ответом.
Какова временная сложность LeetCode 2996? O(n), потому что вы сканируете массив один раз, чтобы вычислить префиксную сумму, а затем выполняете поиск за постоянное время. Пространственная сложность составляет O(n) с HashSet или O(1) со сканированием массива.
Можно ли решить LeetCode 2996 без дополнительного пространства? Да. Вместо HashSet используйте цикл while для перебора массива с флагом "найдено" для ...