LeetCode 1541: Минимальное количество вставок для балансировки скобок | НЕ попадитесь в ловушку 1:2!
Code Intuition
0:00 / 0:00
LeetCode 1541: Минимальное количество вставок для балансировки скобок | НЕ попадитесь в ловушку 1:2!
25 просмотров · 1 дн. назад
Code Intuition
36 подписчиков
25 просмотров · 1 дн. назад
LeetCode 1541: Минимальное количество вставок для балансировки строки в скобках — оптимальное пространство O(1) 🚀
📌 Ссылка на задачу: https://leetcode.com/problems/minimum...
Добро пожаловать обратно в Code Intuition! В сегодняшнем видео мы разберем задачу LeetCode 1541, «Минимальное количество вставок для балансировки строки в скобках».
Это НЕ стандартная задача о скобках. Здесь каждая скобка «(» должна соответствовать ДВУМ последовательным символам «)». Большинство людей заставляют использовать стек, но одного прохода с двумя целочисленными счетчиками достаточно, используя жадную балансировку четности и строго O(1) дополнительное пространство.
💡 Основная идея:
Правило соответствия «1 к 2»: каждый «(» создает потребность в двух закрывающих скобках. Мы отслеживаем общее количество необходимых закрывающих скобок в одной переменной, называемой «потребность».
Ловушка открывающей скобки: если «(» появляется, когда «потребность» нечетная, то предыдущий «(» получил только одну из своих двух «)». Эта пара наполовину завершена, и закрывающую пару нельзя разделить новым открывающим символом. Поэтому мы вставляем один «)», чтобы завершить ее (количество вставок увеличивается на 1, «потребность» уменьшается на 1), и только тогда новый «(» добавляет 2 к «потребности».
Правило закрывающей скобки: если «потребность» больше нуля, этот «)» удовлетворяет одной ожидаемой закрывающей скобке, поэтому «потребность» уменьшается на 1. Если «потребность» равна нулю, то этот «)» появился без ожидающего его открывающего символа. Мы вставляем перед ним скобку «(», которая требует две скобки «)», и поскольку текущий символ закрывает одну из них, потребность становится равной 1.
Итого: после сканирования любые оставшиеся значения потребности должны быть заполнены добавлением закрывающих скобок. Ответ прост: потребность плюс вставки.
💡 Что вы узнаете из этого видео:
Почему правило соответствия 1 к 2 нарушает обычный подход со стеком
Что на самом деле означает нечетная пара закрывающих элементов: наполовину завершенная пара
Почему новый символ «(» заставляет вставлять элемент, когда потребность нечетная
Как жадным способом исправляется лишний символ «)», которому нечего сопоставить
Пошаговое решение на доске с визуализацией ящика для монет, а затем кодирование в реальном времени
Полный разбор временной и пространственной сложности
⏳ Временная сложность: O(N) — один линейный обход строки
💾 Пространственная сложность: O(1) — всего две целочисленные переменные, нулевое выделение памяти в куче
Решено в рамках моей ежедневной серии задач на LeetCode, по одной задаче в день, развивая интуицию, а не просто запоминая решение. Полный код на C++ смотрите в закрепленном комментарии.
Не забудьте поставить лайк, подписаться и включить уведомления, чтобы никогда не пропускать ежедневный разбор алгоритма. Оставьте комментарий, если у вас есть вопросы по случаю нечетной потребности, именно он чаще всего вызывает затруднения.
Свяжитесь со мной:
LinkedIn: / harshwardhanzanwar
Instagram: https://www.instagram.com/that.harsh....
(Нужен перерыв от алгоритмов и экранов терминала? Смотрите здесь видеоролики, влоги и жизнь за пределами кода!)
#leetcode #leetcode1541 #minimuminsertionstobalanceaparenthesesstring #greedy #strings #stack #parentheses #algorithms #datastructures #competitiveprogramming #codeintuition #codinginterview #cpp #codingtutorial