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
203. Remove Linked List Elements
Company:
#leetcode203 | #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
160. Intersection of Two Linked Lists
Company:
Попробуйте написать решение, используя O(1) памяти
#leetcode160 | #easy #linkedlist
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n + m)
Space: O(1)
➖ создаем два указателя: currA и currB и одновременно передвигаем их вперед➖ если один указатель дошёл до конца своего списка, он переходит в начало другого. То есть currA сначала проходит список A, затем список B, а currB наоборот➖ если указатель равны, прекращаем цикл и возвращаем ответ
a + b, а currB b + aa + b, поэтому списки гарантированно синхронизируются по длине и указатели либо встречаются в точке пересечения, либо оба становятся nullPlease open Telegram to view this post
VIEW IN TELEGRAM
24. Swap Nodes in Pairs
Company:
#leetcode24 | #medium #linkedlist
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(1)
prev -> 1 -> 2 -> 3:prev -> 2 1 -> 3prev -> 2 -> 1 -> 3Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
61. Rotate List
Company:
#leetcode61 | #medium #linkedlist
Please open Telegram to view this post
VIEW IN TELEGRAM