Time: O(nlogn)
Space: O(n)
🟦 для решения найдем максимальное окно (подмассив), в котором все элементы уникальны и максимальный элемент не превышает минимальный плюс длина исходного массива.
При этом нам не нужно думать, как заменить оставшиеся элементы, так как необходимо вывести только количество операций. Также нам не важен порядок элементов, а только минимальный и максимальный, поэтому их можно отсортировать для удобного поиска
Please open Telegram to view this post
VIEW IN TELEGRAM
30. Substring with Concatenation of All Words
Company:
Сцепленная строка — это строка, которая содержит в точности все строки любой перестановки words.
Верните список начальных индексов всех сцепленных подстрок в s
#leetcode30 | #hard #slidingwindow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Time: O(k + n*m)
Space: O(k + m)
🟦 в начале инициализируем все необходимые глобальные переменные для удобного доступа: длина строки, длина одного слова, количество всех слов и размер окна, как умножение кол-ва всех слов на длину одного. Также формируем HashMap частоты слов из words🟦 после используем функцию slidingWindow для всех стартовых позиций от 0 до длины одного слова, так как дальше все позиции будут повторяться и не нужно их снова рассматривать
🟦 внутри этой функции мы идём по строке с шагом wordLen, каждый раз формируя новые слова, ведя их учёт в HashMap (wordsFound) и считая их количество (wordsCount) или обозначая, что оно лишнее (excessWord)🟦 рассматриваем две ситуации:
1. Если текущее слово не из wordsMap: сбрасываем все счётчики и начинаем окно заново
2. Иначе:➖ если достигнут допустимый размер окна или есть лишнее слово, сужаем окно с левой стороны, убирая слова из wordsFound и корректируя переменные➖ добавляем текущее слово в wordsFound➖ если оно встречается чаще, чем в wordsMap, выставляем флаг excessWord = true (лишнее слово)➖ если все нужные слова найдены и нет лишнего — добавляем левую границу окна в результат
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Стек помогает управлять последовательностью действий, когда нужно работать с последними добавленными элементами.
Например, ты пишешь текст в редакторе и хочешь отменить последнее действие.
Каждый раз, когда ты что-то пишешь или удаляешь, это добавляется в стек и, если ты нажимаешь "Отменить", редактор берёт из стека последнюю операцию и отменяет её.
#stack
Please open Telegram to view this post
VIEW IN TELEGRAM
1047. Remove All Adjacent Duplicates In String
Company:
Верните окончательную строку после всех удалений
#leetcode1047 | #easy #stack
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
Please open Telegram to view this post
VIEW IN TELEGRAM
1475. Final Prices With a Special Discount in a Shop
Company:
На каждый товар Вы получаете скидку, эквивалентную цене ближайшего товара, которая меньше или равна цене текущего, если такого товара не нашлось, скидка равна 0.
Верните массив result, где result[i] — окончательная цена, которую вы заплатите за товар в магазине с учетом специальной скидки
#leetcode1475 | #easy #stack
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
➖ для каждого элемента наш стек должен содержать все самые последние цены перед этим элементом, которые больше него. Это означает, что все элементы в стеке находятся в порядке возрастания, что называется монотонным стеком
Please open Telegram to view this post
VIEW IN TELEGRAM
227. Basic Calculator II
Company:
#leetcode227 | #medium #stack
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
Please open Telegram to view this post
VIEW IN TELEGRAM
1209. Remove All Adjacent Duplicates in String II
Company:
Верните итоговую строку после всех удалений
#leetcode1209 | #medium #stack
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
new String(res, 0, j)Please open Telegram to view this post
VIEW IN TELEGRAM
1673. Find the Most Competitive Subsequence
Company:
Подпоследовательность A более конкурентоспособна, чем подпоследовательность B, если в первой позиции, где A и B различаются, подпоследовательность A имеет меньшее число.
Например, [1, 3, 4] более конкурентоспособна, чем [1, 3, 5]
#leetcode1673 | #medium #stack
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(k)
🟦 для решения данной задачи мы всегда пытаемся создать последовательность с идущими подряд минимальными элементами, для этого будем поддерживать монотонный стек.
При этом учитываем, что мы не можем оставить в стеке свободного места больше, чем осталось элементов до конца массива, иначе мы не получим полную последовательность длиной k
Please open Telegram to view this post
VIEW IN TELEGRAM
456. 132 Pattern
Company:
i < j < k и nums[i] < nums[k] < nums[j]Верните true, если в массиве есть шаблон 132
#leetcode456 | #medium #stack
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
j и k будем поддерживать монотонный стек, в котором все элементы идут в убывающем порядке. Поэтому в тот момент, когда наш стек не пуст, у нас всегда есть две найденные позиции, для которых выполняется условие nums[k] < nums[j]i, чтобы он также подходил под условия. Для этого предварительно составляем массив минимумов, чтобы для любой позиции точно знать, какой минимальный элемент был перед ней1⃣ Удаляем элементы из стека, пока он не пуст и его верхний элемент меньше или равен текущему2⃣ Проверяем главное условие nums[i] < nums[k] < nums[j]:▫ стек не пуст — значит в нем сейчас содержится элемент j, а текущий является k▫ минимальный элемент слева от индекса j меньше текущего элемента k (ищем элемент i)3⃣ Добавляем индекс текущего элемента в стек
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
1106. Parsing A Boolean Expression
Company:
Выражение состоит из:
#leetcode1106 | #hard #stack
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
Please open Telegram to view this post
VIEW IN TELEGRAM
1944. Number of Visible People in a Queue
Company:
Человек может видеть другого человека справа от себя, если все люди между ними имеют меньший рост, чем и он сам, и тот, кого он видит.
Верните массив result, где result[i] — количество людей, которых человек на позиции i может видеть справа от себя
#leetcode1944 | #hard #stack
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
Please open Telegram to view this post
VIEW IN TELEGRAM