LeetCode 921: Минимальное количество вставок для валидации скобок | НЕ используйте стек! (Трюк с ...
Code Intuition
0:00 / 0:00
LeetCode 921: Минимальное количество вставок для валидации скобок | НЕ используйте стек! (Трюк с ...
19 просмотров · 4 дн. назад
Code Intuition
35 подписчиков
19 просмотров · 4 дн. назад
LeetCode 921: Минимальное сложение для корректного отображения скобок — оптимальное решение с O(1) пространством памяти 🚀
📌 Ссылка на задачу: https://leetcode.com/problems/minimum...
Добро пожаловать обратно в Code Intuition! В сегодняшнем видео мы разберем задачу LeetCode 921, «Минимальное сложение для корректного отображения скобок».
Большинство людей инстинктивно тянутся к стеку, как только видят задачу со скобками. Но поскольку эта задача включает только один тип скобок, выделение дополнительной памяти совершенно не требуется. Это чистое решение с помощью жадного подхода с двумя счетчиками за O(1) пространство памяти.
💡 Основная идея:
Почему стек не нужен: стеки оправданы, когда задействовано несколько типов скобок и порядок совпадения типов имеет значение. Поскольку в игре используются только скобки '(' и ')', на самом деле важен только текущий подсчет несовпадающих открытых позиций, и ничего больше.
Отслеживание открытых скобок: каждая скобка '(' увеличивает счетчик, представляя собой открывающую скобку, ожидающую своей пары.
Обработка закрывающих скобок: если есть несовпадающая открытая позиция, эта скобка ')' сопоставляется с ней, и счетчик уменьшается. Если открытой позиции нет, эта скобка ')' никогда не может быть сопоставлена в таком виде, перед ней необходимо вставить открывающую скобку, поэтому вместо этого увеличивается отдельный счетчик вставок.
Итоговое значение: после завершения сканирования каждая оставшаяся несовпадающая открытая позиция требует закрывающей скобки, а каждая отслеживаемая вставка уже требует открывающей скобки. Общее количество необходимых сумм — это просто сумма обоих счетчиков.
💡 Что вы узнаете из этого видео:
Почему стек не нужен, когда существует только один тип скобок
Отслеживание несовпадающих открытий с помощью одного счетчика
Два различных случая ошибки: висячая ')' и оставшаяся '('
Почему окончательный ответ — это просто сумма двух счетчиков
Полный анализ временной и пространственной сложности
⏳ Временная сложность: O(N) — один линейный проход по строке
💾 Пространственная сложность: O(1) — строго постоянное пространство с использованием двух целочисленных счетчиков
Решено в рамках моей ежедневной серии задач на LeetCode, по одной задаче в день, развивающей интуицию, а не просто запоминающей решение. Полный код на C++ смотрите в закрепленном комментарии.
Не забудьте поставить лайк, подписаться и включить уведомления, чтобы никогда не пропускать ежедневный разбор алгоритма. Оставьте комментарий, если у вас есть вопросы о логике с двумя счетчиками.
Свяжитесь со мной:
LinkedIn: / harshwardhanzanwar
#leetcode #leetcode921 #minimumaddtomakeparenthesesvalid #strings #greedy #stack #algorithms #datastructures #competitiveprogramming #codeintuition #codinginterview #cpp #codingtutorial