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
768. Max Chunks To Make Sorted II
Company:
Необходимо разбить его на несколько непрерывных фрагментов, отсортировать каждый из них по отдельности, а затем соединить обратно в один массив. Если итоговый массив получается полностью отсортированным, такое разбиение считается допустимым.
Найдите максимальное количество таких фрагментов, при котором выполняется условие
#leetcode768 | #hard #stack
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
➖ пока текущий элемент меньше вершины стека, то есть он нарушает условие порядка фрагментов, мы удаляем элементы из стека (расширяем предыдущий фрагмент)➖ если текущий элемент больше или равен текущему максимуму, значит мы можем начать новый фрагмент:▫ кладем в стек currMax и обновляем его на текущий элемент
Please open Telegram to view this post
VIEW IN TELEGRAM
224. Basic Calculator
Company:
Верните результат выражения
#leetcode224 | #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
Представь очередь за билетами на концерт. Каждый человек знает, кто следующий и никто не оглядывается назад.
Если ты решаешь пропустить вперёд своего друга, ты просто говоришь: "Я теперь за тобой", а он запоминает, кто должен быть следующим. Так работает вставка — связи между людьми меняются, но сама очередь не двигается.
Если человек перед тобой уходит, ты просто запоминаешь следующего за ним — это и есть удаление.
А вот если ты пришёл в конец очереди и хочешь найти друга где-то в середине, тебе придётся пройти ее всю по порядку, спрашивая каждого: "Кто следующий?", пока не дойдёшь до нужного человека. Потому что в этой очереди никто не пронумерован — доступ возможен только шаг за шагом. Так работает поиск.
В задачах класс односвязного списка представлен как:
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}Каждый элемент состоит из двух частей: значение и ссылка на следующий узел
Список начинается с одного элемента — головы, именно с неё начинается обход всего списка
Нельзя просто взять и перейти сразу, например, к пятому элементу. Нужно идти от головы, шаг за шагом — пока не дойдёшь. Это похоже на то, как ты читаешь книгу — перелистывая страницу за страницей
Сначала надо дойти до нужного места, затем поменять ссылки
Похоже на вставку: находишь нужный узел и просто перенаправляешь ссылку предыдущего элемента мимо него, на следующий
#linkedlist
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
876. Middle of the Linked List
Company:
#leetcode876 | #easy #linkedlist
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(1)
Please open Telegram to view this post
VIEW IN TELEGRAM