HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 <p><strong>Рассказываем, какие алгоритмы учить к собеседованиям и что делать, если решать алгоритмические задачи вам просто скучно.</strong></p>
1 <p><strong>Рассказываем, какие алгоритмы учить к собеседованиям и что делать, если решать алгоритмические задачи вам просто скучно.</strong></p>
2 <p><em>Это адаптированный перевод статьи<a>Grokking LeetCode: A Smarter Way to Prepare for Coding Interviews</a>, автор -<a><em>Арслан Ахмад</em></a>. Повествование ведется от имени автора.</em></p>
2 <p><em>Это адаптированный перевод статьи<a>Grokking LeetCode: A Smarter Way to Prepare for Coding Interviews</a>, автор -<a><em>Арслан Ахмад</em></a>. Повествование ведется от имени автора.</em></p>
3 <blockquote><p>Эта статья - для разработчиков, которые частично уже знают алгоритмы. Если вы еще не знакомы с ними, советуем пройти трек "<a>Алгоритмы и структуры данных</a>" в Хекслете. Вы изучите списки, стеки, очереди, структуры данных, которые помогут проектировать структуры и алгоритмы.</p>
3 <blockquote><p>Эта статья - для разработчиков, которые частично уже знают алгоритмы. Если вы еще не знакомы с ними, советуем пройти трек "<a>Алгоритмы и структуры данных</a>" в Хекслете. Вы изучите списки, стеки, очереди, структуры данных, которые помогут проектировать структуры и алгоритмы.</p>
4 </blockquote><p><a>Грокать алгоритмы или не грокать</a>? Что делать, если вам не хочется решать сто задач к вашему следующему собеседованию?</p>
4 </blockquote><p><a>Грокать алгоритмы или не грокать</a>? Что делать, если вам не хочется решать сто задач к вашему следующему собеседованию?</p>
5 <p>Часть меня ненавидит технические собеседования, в первую очередь из-за того, что мне нужно повторять много материала. Кроме того, в процессе самого собеседования мне часто приходится предлагать какое-то особенное решение, а не то, которое я бы выбрал в своей будничной практике.</p>
5 <p>Часть меня ненавидит технические собеседования, в первую очередь из-за того, что мне нужно повторять много материала. Кроме того, в процессе самого собеседования мне часто приходится предлагать какое-то особенное решение, а не то, которое я бы выбрал в своей будничной практике.</p>
6 <p>Несмотря на это, я люблю алгоритмы и люблю решать задачки по программированию. Для меня это веселое времяпровождение и хорошая тренировка для мозга. Учитывая все это, хочу рассказать вам о моей собственной технике подготовки к собеседованиям, которая намного интереснее и волнительнее, чем обычная подготовка.</p>
6 <p>Несмотря на это, я люблю алгоритмы и люблю решать задачки по программированию. Для меня это веселое времяпровождение и хорошая тренировка для мозга. Учитывая все это, хочу рассказать вам о моей собственной технике подготовки к собеседованиям, которая намного интереснее и волнительнее, чем обычная подготовка.</p>
7 <p>Коротко расскажу о себе, чтобы вы убедились в моей экспертности. Я программирую уже 20 лет, за это время я много раз менял место работы. Всего я прошел около 30 воронок найма - больше 120 собеседований. Плюс к этому у меня есть опыт с той стороны баррикад: я провел около 300 технических собеседований и больше 200 собеседований по<a>системному дизайну</a>.</p>
7 <p>Коротко расскажу о себе, чтобы вы убедились в моей экспертности. Я программирую уже 20 лет, за это время я много раз менял место работы. Всего я прошел около 30 воронок найма - больше 120 собеседований. Плюс к этому у меня есть опыт с той стороны баррикад: я провел около 300 технических собеседований и больше 200 собеседований по<a>системному дизайну</a>.</p>
8 <h2>Содержание</h2>
8 <h2>Содержание</h2>
9 <ul><li><a>Где мы грокаем алгоритмы</a></li>
9 <ul><li><a>Где мы грокаем алгоритмы</a></li>
10 <li><a>Какую систему обучения придумал я</a></li>
10 <li><a>Какую систему обучения придумал я</a></li>
11 <li><a>Самые распространенные паттерны для решения задач</a></li>
11 <li><a>Самые распространенные паттерны для решения задач</a></li>
12 </ul><h2>Где мы грокаем алгоритмы</h2>
12 </ul><h2>Где мы грокаем алгоритмы</h2>
13 <p>Если вы когда-нибудь искали работу, то знаете, что есть ресурсы, которые<a>собирают задачи с собеседований</a>. Один из них - LeetCode, это самый популярный сайт, где очень много задач. Плюс вокруг него сложилось развитое сообщество, где можно обсуждать задачки с другими инженерами. Если выдается свободная минутка, я всегда не прочь провести ее на LeetCode. Там я решаю задачи или читаю чужие решения, после чего сравниваю со своими.</p>
13 <p>Если вы когда-нибудь искали работу, то знаете, что есть ресурсы, которые<a>собирают задачи с собеседований</a>. Один из них - LeetCode, это самый популярный сайт, где очень много задач. Плюс вокруг него сложилось развитое сообщество, где можно обсуждать задачки с другими инженерами. Если выдается свободная минутка, я всегда не прочь провести ее на LeetCode. Там я решаю задачи или читаю чужие решения, после чего сравниваю со своими.</p>
14 <p>Самая большая проблема LeetCode в том, что сайту не хватает продуманной системы обучения. У него много разных задач, в которых легко потеряться. Сколько нужно таких задач, чтобы подготовиться к собеседованию? Я бы предпочел двигаться по продуманной программе, в конце которой я смогу ощутить уверенность в собственных знаниях. Но системы нет, а я ленивый, и вообще - не хочу решать 500+ задач.</p>
14 <p>Самая большая проблема LeetCode в том, что сайту не хватает продуманной системы обучения. У него много разных задач, в которых легко потеряться. Сколько нужно таких задач, чтобы подготовиться к собеседованию? Я бы предпочел двигаться по продуманной программе, в конце которой я смогу ощутить уверенность в собственных знаниях. Но системы нет, а я ленивый, и вообще - не хочу решать 500+ задач.</p>
15 <p>Одно из популярных решений для этой проблемы - решать задачи, которые относятся к одной структуре данных (например, прорешать несколько задач с деревьями). Какая-то система обучения появляется, но это решение меня все равно не устраивает. Например, что делать, если задачу можно решить при помощи разных структур данных?</p>
15 <p>Одно из популярных решений для этой проблемы - решать задачи, которые относятся к одной структуре данных (например, прорешать несколько задач с деревьями). Какая-то система обучения появляется, но это решение меня все равно не устраивает. Например, что делать, если задачу можно решить при помощи разных структур данных?</p>
16 <h2>Какую систему обучения придумал я</h2>
16 <h2>Какую систему обучения придумал я</h2>
17 <p>Я бы предпочел такую систему, в которой задачи распределены по паттернам, а не по структурам данных. Мои любимые паттерны - скользящее окно, нахождение цикла и топологическая сортировка. Когда я научился пользоваться этими методами, я стал решать незнакомые задачи по аналогии с задачами, которые решал до этого. Благодаря этому весь процесс подготовки к собеседованиям стал более интересным и веселым. Ну и конечно же, более систематичным.</p>
17 <p>Я бы предпочел такую систему, в которой задачи распределены по паттернам, а не по структурам данных. Мои любимые паттерны - скользящее окно, нахождение цикла и топологическая сортировка. Когда я научился пользоваться этими методами, я стал решать незнакомые задачи по аналогии с задачами, которые решал до этого. Благодаря этому весь процесс подготовки к собеседованиям стал более интересным и веселым. Ну и конечно же, более систематичным.</p>
18 <p>Я обнаружил 25 паттернов, которые лежат в основе решения большинства задач. Думаю, эти паттерны помогут кому угодно показывать на собеседованиях красивые и элегантные решения. Вся фишка этих паттернов в том, что понимая один из них, вы научитесь решать сразу несколько задач, десятки задач.</p>
18 <p>Я обнаружил 25 паттернов, которые лежат в основе решения большинства задач. Думаю, эти паттерны помогут кому угодно показывать на собеседованиях красивые и элегантные решения. Вся фишка этих паттернов в том, что понимая один из них, вы научитесь решать сразу несколько задач, десятки задач.</p>
19 <h2>Самые распространенные паттерны для решения задач</h2>
19 <h2>Самые распространенные паттерны для решения задач</h2>
20 <ol><li><a>Метод скользящего окна</a></li>
20 <ol><li><a>Метод скользящего окна</a></li>
21 <li><a>Метод двух указателей</a></li>
21 <li><a>Метод двух указателей</a></li>
22 <li><a>Нахождение цикла</a></li>
22 <li><a>Нахождение цикла</a></li>
23 <li><a>Интервальное слияние</a></li>
23 <li><a>Интервальное слияние</a></li>
24 <li><a>Цикличная сортировка</a></li>
24 <li><a>Цикличная сортировка</a></li>
25 <li><a>In-place Reversal для LinkedList</a></li>
25 <li><a>In-place Reversal для LinkedList</a></li>
26 <li><a>Поиск в ширину</a></li>
26 <li><a>Поиск в ширину</a></li>
27 <li><a>Поиск в глубину</a></li>
27 <li><a>Поиск в глубину</a></li>
28 <li><a>Двоичная куча</a></li>
28 <li><a>Двоичная куча</a></li>
29 <li><a>Подмножества</a></li>
29 <li><a>Подмножества</a></li>
30 <li>Усовершенствованный<a>бинарный поиск</a></li>
30 <li>Усовершенствованный<a>бинарный поиск</a></li>
31 <li><a>Побитовое исключающее ИЛИ</a></li>
31 <li><a>Побитовое исключающее ИЛИ</a></li>
32 <li><a>Top<em>K</em>Elements</a></li>
32 <li><a>Top<em>K</em>Elements</a></li>
33 <li><a>K-образное слияние</a></li>
33 <li><a>K-образное слияние</a></li>
34 <li><a>Задача о рюкзаке 0-1</a></li>
34 <li><a>Задача о рюкзаке 0-1</a></li>
35 - <li><a>Задача о неоганиченном рюкзаке</a></li>
35 + <li><a>Задача о неограниченном рюкзаке</a></li>
36 <li><a>Числа Фибоначчи</a></li>
36 <li><a>Числа Фибоначчи</a></li>
37 <li><a>Наибольшая последовательность-палиндром</a></li>
37 <li><a>Наибольшая последовательность-палиндром</a></li>
38 <li><a>Наибольшая общая подстрока</a></li>
38 <li><a>Наибольшая общая подстрока</a></li>
39 <li><a>Топологическая сортировка</a></li>
39 <li><a>Топологическая сортировка</a></li>
40 <li>Чтение<a>префиксного дерева</a></li>
40 <li>Чтение<a>префиксного дерева</a></li>
41 <li>Задача:<a>количество островов в матрице</a></li>
41 <li>Задача:<a>количество островов в матрице</a></li>
42 <li><a>Метод проб и ошибок</a></li>
42 <li><a>Метод проб и ошибок</a></li>
43 <li><a>Система непересекающихся множеств</a></li>
43 <li><a>Система непересекающихся множеств</a></li>
44 <li>Задача:<a>найти уникальные маршруты</a></li>
44 <li>Задача:<a>найти уникальные маршруты</a></li>
45 </ol><h3>Метод скользящего окна</h3>
45 </ol><h3>Метод скользящего окна</h3>
46 <p><strong>Контекст:</strong>Мы используем этот метод, когда у нас есть входные данные с заданным размером окна.</p>
46 <p><strong>Контекст:</strong>Мы используем этот метод, когда у нас есть входные данные с заданным размером окна.</p>
47 <p><strong>Задачи для этого паттерна:</strong></p>
47 <p><strong>Задачи для этого паттерна:</strong></p>
48 <ul><li><a>Longest Substring with K Distinct Characters</a></li>
48 <ul><li><a>Longest Substring with K Distinct Characters</a></li>
49 <li><a>Fruits into Baskets</a></li>
49 <li><a>Fruits into Baskets</a></li>
50 <li><a>Permutation in a String</a></li>
50 <li><a>Permutation in a String</a></li>
51 </ul><h3>Метод двух указателей</h3>
51 </ul><h3>Метод двух указателей</h3>
52 <p><strong>Контекст:</strong>Мы используем два указателя, чтобы перебрать все входные данные. Обычно два указателя движутся в противоположных направлениях с фиксированным интервалом.</p>
52 <p><strong>Контекст:</strong>Мы используем два указателя, чтобы перебрать все входные данные. Обычно два указателя движутся в противоположных направлениях с фиксированным интервалом.</p>
53 <p><strong>Задачи для этого паттерна:</strong></p>
53 <p><strong>Задачи для этого паттерна:</strong></p>
54 <ul><li><a>Squaring a Sorted Array</a></li>
54 <ul><li><a>Squaring a Sorted Array</a></li>
55 <li><a>Dutch National Flag Problem</a></li>
55 <li><a>Dutch National Flag Problem</a></li>
56 <li><a>Minimum Window Sort</a></li>
56 <li><a>Minimum Window Sort</a></li>
57 </ul><h3>Нахождение цикла</h3>
57 </ul><h3>Нахождение цикла</h3>
58 <p><strong>Контекст:</strong>Еще этот алгоритм называют алгоритмом черепахи и зайца. В отличие от предыдущего метода, два указателя тут движутся с разной скоростью.</p>
58 <p><strong>Контекст:</strong>Еще этот алгоритм называют алгоритмом черепахи и зайца. В отличие от предыдущего метода, два указателя тут движутся с разной скоростью.</p>
59 <p><strong>Задачи для этого паттерна:</strong></p>
59 <p><strong>Задачи для этого паттерна:</strong></p>
60 <ul><li><a>Middle of the LinkedList</a></li>
60 <ul><li><a>Middle of the LinkedList</a></li>
61 <li><a>Happy Number</a></li>
61 <li><a>Happy Number</a></li>
62 <li><a>Cycle in a Circular Array</a></li>
62 <li><a>Cycle in a Circular Array</a></li>
63 </ul><h3>Интервальное слияние</h3>
63 </ul><h3>Интервальное слияние</h3>
64 <p><strong>Контекст:</strong>Этот метод применяют, если есть пересекающиеся интервалы. Например, на этом изображении мы видим, что интервалы a и b могут пересекаться шестью разными способами:</p>
64 <p><strong>Контекст:</strong>Этот метод применяют, если есть пересекающиеся интервалы. Например, на этом изображении мы видим, что интервалы a и b могут пересекаться шестью разными способами:</p>
65 <p><strong>Задачи для этого паттерна:</strong></p>
65 <p><strong>Задачи для этого паттерна:</strong></p>
66 <ul><li><a>Intervals Intersection</a></li>
66 <ul><li><a>Intervals Intersection</a></li>
67 <li><a>Conflicting Appointments</a></li>
67 <li><a>Conflicting Appointments</a></li>
68 <li><a>Minimum Meeting Rooms</a></li>
68 <li><a>Minimum Meeting Rooms</a></li>
69 </ul><h3>Цикличная сортировка</h3>
69 </ul><h3>Цикличная сортировка</h3>
70 <p><strong>Контекст:</strong>Если входные данные лежат в заданном интервале, используйте цикличную сортировку.</p>
70 <p><strong>Контекст:</strong>Если входные данные лежат в заданном интервале, используйте цикличную сортировку.</p>
71 <p><strong>Задачи для этого паттерна:</strong></p>
71 <p><strong>Задачи для этого паттерна:</strong></p>
72 <ul><li><a>Find all Missing Numbers</a></li>
72 <ul><li><a>Find all Missing Numbers</a></li>
73 <li><a>Find all Duplicate Numbers</a></li>
73 <li><a>Find all Duplicate Numbers</a></li>
74 <li><a>Find the First K Missing Positive Numbers</a></li>
74 <li><a>Find the First K Missing Positive Numbers</a></li>
75 </ul><h3>In-place Reversal для LinkedList</h3>
75 </ul><h3>In-place Reversal для LinkedList</h3>
76 <p><strong>Техника:</strong>Эта техника описывает эффективный способ перевернуть связи между узлами в LinkedList (класс Java). Часто мы ограничены<em>in-place</em>, то есть мы должны использовать исходные узлы.</p>
76 <p><strong>Техника:</strong>Эта техника описывает эффективный способ перевернуть связи между узлами в LinkedList (класс Java). Часто мы ограничены<em>in-place</em>, то есть мы должны использовать исходные узлы.</p>
77 <p><strong>Задачи для этого паттерна:</strong></p>
77 <p><strong>Задачи для этого паттерна:</strong></p>
78 <ul><li><a>Reverse every K-element Sub-list</a></li>
78 <ul><li><a>Reverse every K-element Sub-list</a></li>
79 <li><a>Rotate a LinkedList</a></li>
79 <li><a>Rotate a LinkedList</a></li>
80 </ul><h3>Поиск в ширину</h3>
80 </ul><h3>Поиск в ширину</h3>
81 <p><strong>Контекст:</strong>Это метод для решения задач с деревьями.</p>
81 <p><strong>Контекст:</strong>Это метод для решения задач с деревьями.</p>
82 <p><strong>Задачи для этого паттерна:</strong></p>
82 <p><strong>Задачи для этого паттерна:</strong></p>
83 <ul><li><a>Binary Tree Level Order Traversal</a></li>
83 <ul><li><a>Binary Tree Level Order Traversal</a></li>
84 <li><a>Minimum Depth of a Binary Tree</a></li>
84 <li><a>Minimum Depth of a Binary Tree</a></li>
85 <li><a>Connect Level Order Siblings</a></li>
85 <li><a>Connect Level Order Siblings</a></li>
86 </ul><h3>Поиск в глубину</h3>
86 </ul><h3>Поиск в глубину</h3>
87 <p><strong>Контекст:</strong>Тот же, что для предыдущего метода.</p>
87 <p><strong>Контекст:</strong>Тот же, что для предыдущего метода.</p>
88 <p><strong>Задачи для этого паттерна:</strong></p>
88 <p><strong>Задачи для этого паттерна:</strong></p>
89 <ul><li><a>Path With Given Sequence</a></li>
89 <ul><li><a>Path With Given Sequence</a></li>
90 <li><a>Count Paths for a Sum</a></li>
90 <li><a>Count Paths for a Sum</a></li>
91 </ul><h3>Двоичная куча</h3>
91 </ul><h3>Двоичная куча</h3>
92 <p><strong>Контекст:</strong>Во многих задачах у нас есть набор элементов, который можно разделить на две части. Тогда мы могли бы выяснить, какой элемент является наименьшим в первой куче и какой является наибольшим во второй куче.</p>
92 <p><strong>Контекст:</strong>Во многих задачах у нас есть набор элементов, который можно разделить на две части. Тогда мы могли бы выяснить, какой элемент является наименьшим в первой куче и какой является наибольшим во второй куче.</p>
93 <p><strong>Задачи для этого паттерна:</strong></p>
93 <p><strong>Задачи для этого паттерна:</strong></p>
94 <ul><li><a>Find the Median of a Number Stream</a></li>
94 <ul><li><a>Find the Median of a Number Stream</a></li>
95 <li><a>Next Interval</a></li>
95 <li><a>Next Interval</a></li>
96 </ul><h3>Подмножества</h3>
96 </ul><h3>Подмножества</h3>
97 <p><strong>Контекст:</strong>Если задача требует перестановки или комбинаций элементов, используйте подмножества.</p>
97 <p><strong>Контекст:</strong>Если задача требует перестановки или комбинаций элементов, используйте подмножества.</p>
98 <p><strong>Задачи для этого паттерна:</strong></p>
98 <p><strong>Задачи для этого паттерна:</strong></p>
99 <ul><li><a>String Permutations by changing case</a></li>
99 <ul><li><a>String Permutations by changing case</a></li>
100 <li><a>Unique Generalized Abbreviations</a></li>
100 <li><a>Unique Generalized Abbreviations</a></li>
101 </ul><h3>Усовершенствованный бинарный поиск</h3>
101 </ul><h3>Усовершенствованный бинарный поиск</h3>
102 <p><strong>Контекст:</strong>Эта техника использует логический оператор для наиболее эффективного поиска элементов.</p>
102 <p><strong>Контекст:</strong>Эта техника использует логический оператор для наиболее эффективного поиска элементов.</p>
103 <p><strong>Задачи для этого паттерна:</strong></p>
103 <p><strong>Задачи для этого паттерна:</strong></p>
104 <ul><li><a>Two Single Numbers</a></li>
104 <ul><li><a>Two Single Numbers</a></li>
105 <li><a>Flip and Invert an Image</a></li>
105 <li><a>Flip and Invert an Image</a></li>
106 </ul><h3>Наибольшее<em>K</em>элементов</h3>
106 </ul><h3>Наибольшее<em>K</em>элементов</h3>
107 <p><strong>Контекст:</strong>Эта техника используется, чтобы найти наибольший/наименьший или наиболее часто встречающийся набор k-элементов в коллекции.</p>
107 <p><strong>Контекст:</strong>Эта техника используется, чтобы найти наибольший/наименьший или наиболее часто встречающийся набор k-элементов в коллекции.</p>
108 <p><strong>Задачи для этого паттерна:</strong></p>
108 <p><strong>Задачи для этого паттерна:</strong></p>
109 <ul><li><a>'K' Closest Points to the Origin</a></li>
109 <ul><li><a>'K' Closest Points to the Origin</a></li>
110 <li><a>Maximum Distinct Elements</a></li>
110 <li><a>Maximum Distinct Elements</a></li>
111 </ul><h3>K-образное слияние</h3>
111 </ul><h3>K-образное слияние</h3>
112 <p><strong>Контекст:</strong>Используйте эту технику, если у вас есть список отсортированных массивов.</p>
112 <p><strong>Контекст:</strong>Используйте эту технику, если у вас есть список отсортированных массивов.</p>
113 <p><strong>Задачи для этого паттерна:</strong></p>
113 <p><strong>Задачи для этого паттерна:</strong></p>
114 <ul><li><a>Kth Smallest Number in M Sorted Lists</a></li>
114 <ul><li><a>Kth Smallest Number in M Sorted Lists</a></li>
115 <li><a>Kth Smallest Number in a Sorted Matrix</a></li>
115 <li><a>Kth Smallest Number in a Sorted Matrix</a></li>
116 </ul><h3>Рюкзак 0-1</h3>
116 </ul><h3>Рюкзак 0-1</h3>
117 <p><strong>Контекст:</strong>Этот паттерн используют для задач на оптимизацию. Используйте эту технику, чтобы выбирать элементы, которые дают максимум выгоды в данном наборе ограничений по вместимости. Учитывая то, что каждый элемент может быть выбран лишь единожды.</p>
117 <p><strong>Контекст:</strong>Этот паттерн используют для задач на оптимизацию. Используйте эту технику, чтобы выбирать элементы, которые дают максимум выгоды в данном наборе ограничений по вместимости. Учитывая то, что каждый элемент может быть выбран лишь единожды.</p>
118 <p><strong>Задачи для этого паттерна:</strong></p>
118 <p><strong>Задачи для этого паттерна:</strong></p>
119 <ul><li><a>Equal Subset Sum Partition</a></li>
119 <ul><li><a>Equal Subset Sum Partition</a></li>
120 <li><a>Minimum Subset Sum Difference</a></li>
120 <li><a>Minimum Subset Sum Difference</a></li>
121 </ul><h3>Неограниченный рюкзак</h3>
121 </ul><h3>Неограниченный рюкзак</h3>
122 <p><strong>Контекст:</strong>То же самое, что в предыдущем паттерне, но только каждый элемент может быть выбран повторно сколько угодно раз.</p>
122 <p><strong>Контекст:</strong>То же самое, что в предыдущем паттерне, но только каждый элемент может быть выбран повторно сколько угодно раз.</p>
123 <p><strong>Задачи для этого паттерна:</strong></p>
123 <p><strong>Задачи для этого паттерна:</strong></p>
124 <ul><li><a>Rod Cutting</a></li>
124 <ul><li><a>Rod Cutting</a></li>
125 <li><a>Coin Change</a></li>
125 <li><a>Coin Change</a></li>
126 </ul><h3>Числа Фибоначчи</h3>
126 </ul><h3>Числа Фибоначчи</h3>
127 <p><strong>Контекст:</strong>Как очевидно из названия, это паттерн для чисел Фибоначчи. Это последовательность, в которой каждое последующее число равно сумме двух предыдущих чисел.</p>
127 <p><strong>Контекст:</strong>Как очевидно из названия, это паттерн для чисел Фибоначчи. Это последовательность, в которой каждое последующее число равно сумме двух предыдущих чисел.</p>
128 <p><strong>Задачи для этого паттерна:</strong></p>
128 <p><strong>Задачи для этого паттерна:</strong></p>
129 <ul><li><a>Staircase</a></li>
129 <ul><li><a>Staircase</a></li>
130 <li><a>House Thief</a></li>
130 <li><a>House Thief</a></li>
131 </ul><h3>Наибольшая последовательность - палиндром</h3>
131 </ul><h3>Наибольшая последовательность - палиндром</h3>
132 <p><strong>Контекст:</strong>Имеется в виду задача, которая может быть использована как для последовательности, так и для<a>строк</a>. По сути это задача на оптимизацию.</p>
132 <p><strong>Контекст:</strong>Имеется в виду задача, которая может быть использована как для последовательности, так и для<a>строк</a>. По сути это задача на оптимизацию.</p>
133 <p><strong>Задачи для этого паттерна:</strong></p>
133 <p><strong>Задачи для этого паттерна:</strong></p>
134 <ul><li><a>Longest Palindromic Subsequence</a></li>
134 <ul><li><a>Longest Palindromic Subsequence</a></li>
135 <li><a>Minimum Deletions in a String to make it a Palindrome</a></li>
135 <li><a>Minimum Deletions in a String to make it a Palindrome</a></li>
136 </ul><h3>Наибольшая общая подстрока</h3>
136 </ul><h3>Наибольшая общая подстрока</h3>
137 <p><strong>Контекст:</strong>Как понятно из названия, это паттерн для работы со строками или другими последовательностями, а также для работы с наборами строк или последовательностей.</p>
137 <p><strong>Контекст:</strong>Как понятно из названия, это паттерн для работы со строками или другими последовательностями, а также для работы с наборами строк или последовательностей.</p>
138 <p><strong>Задачи для этого паттерна:</strong></p>
138 <p><strong>Задачи для этого паттерна:</strong></p>
139 <ul><li><a>Maximum Sum Increasing Subsequence</a></li>
139 <ul><li><a>Maximum Sum Increasing Subsequence</a></li>
140 <li><a>Edit Distance</a></li>
140 <li><a>Edit Distance</a></li>
141 </ul><h3>Чтение префиксного дерева</h3>
141 </ul><h3>Чтение префиксного дерева</h3>
142 <p><strong>Контекст:</strong>Это специфичная для структуры данных техника, с помощью которой читают или создают префиксное дерево.</p>
142 <p><strong>Контекст:</strong>Это специфичная для структуры данных техника, с помощью которой читают или создают префиксное дерево.</p>
143 <p><strong>Задачи для этого паттерна:</strong></p>
143 <p><strong>Задачи для этого паттерна:</strong></p>
144 <ul><li><a>Longest Word in Dictionary</a></li>
144 <ul><li><a>Longest Word in Dictionary</a></li>
145 <li><a>Palindrome Pairs</a></li>
145 <li><a>Palindrome Pairs</a></li>
146 </ul><h3>Острова в матрице</h3>
146 </ul><h3>Острова в матрице</h3>
147 <p><strong>Контекст:</strong>Этот паттерн подходит для чтения любого двумерного массива, где нам нужно обнаружить связанные между собой элементы.</p>
147 <p><strong>Контекст:</strong>Этот паттерн подходит для чтения любого двумерного массива, где нам нужно обнаружить связанные между собой элементы.</p>
148 <p><strong>Задачи для этого паттерна:</strong></p>
148 <p><strong>Задачи для этого паттерна:</strong></p>
149 <ul><li><a>Number of Distinct Islands</a></li>
149 <ul><li><a>Number of Distinct Islands</a></li>
150 <li><a>Maximum Area of Island</a></li>
150 <li><a>Maximum Area of Island</a></li>
151 </ul><h3>Путь проб и ошибок</h3>
151 </ul><h3>Путь проб и ошибок</h3>
152 <p><strong>Контекст:</strong>Этот паттерн подойдет для того, чтобы пройтись по массиву в поисках подходящего под требования элемента.</p>
152 <p><strong>Контекст:</strong>Этот паттерн подойдет для того, чтобы пройтись по массиву в поисках подходящего под требования элемента.</p>
153 <p><strong>Задачи для этого паттерна:</strong></p>
153 <p><strong>Задачи для этого паттерна:</strong></p>
154 <ul><li><a>Find Kth Smallest Pair Distance</a></li>
154 <ul><li><a>Find Kth Smallest Pair Distance</a></li>
155 <li><a>Minimize Max Distance to Gas Station</a></li>
155 <li><a>Minimize Max Distance to Gas Station</a></li>
156 </ul><h3>Система непересекающихся множеств</h3>
156 </ul><h3>Система непересекающихся множеств</h3>
157 <p><strong>Контекст:</strong>Если данные раскиданы по непересекающимся множествам, то они решаются одним и тем же способом.</p>
157 <p><strong>Контекст:</strong>Если данные раскиданы по непересекающимся множествам, то они решаются одним и тем же способом.</p>
158 <p><strong>Задачи для этого паттерна:</strong></p>
158 <p><strong>Задачи для этого паттерна:</strong></p>
159 <ul><li><a>Number of Provinces</a></li>
159 <ul><li><a>Number of Provinces</a></li>
160 <li><a>Bipartite Graph</a></li>
160 <li><a>Bipartite Graph</a></li>
161 </ul><h3>Поиск уникального маршрута</h3>
161 </ul><h3>Поиск уникального маршрута</h3>
162 <p><strong>Контекст:</strong>Этот паттерн подойдет для прохождения по любому многомерному массиву.</p>
162 <p><strong>Контекст:</strong>Этот паттерн подойдет для прохождения по любому многомерному массиву.</p>
163 <p><strong>Задачи для этого паттерна:</strong></p>
163 <p><strong>Задачи для этого паттерна:</strong></p>
164 <ul><li><a>Find Unique Paths</a></li>
164 <ul><li><a>Find Unique Paths</a></li>
165 <li><a>Dungeon Game</a></li>
165 <li><a>Dungeon Game</a></li>
166 </ul>
166 </ul>