1. Швидкий і Повільний вказівник
Опис: Ця техніка використовує два вказівники, які рухаються з різною швидкістю, щоб вирішити проблеми, пов'язані з циклами, такі як знаходження середини списку, виявлення циклів або перевірка на паліндроми.
- Linked List Cycle II
- Remove nth Node from the End of List
- Find the Duplicate Number
- Palindrome Linked List
2. Перекриті інтервали
Опис: Інтервали часто маніпулюються через сортування та об'єднання на основі їх початкового та кінцевого часу.
- Basic Merge: Merge Intervals
- Interval Insertion: Insert Interval
- My Calendar ii
- Minimum Number of Arrows to Burst Balloons
- Non-overlapping Intervals
3. Префіксні суми
Опис: Префіксні суми/добутки — це техніки, які зберігають накопичувані суми або добутки до кожного індексу, дозволяючи швидко виконувати запити на діапазон підмасивів.
- Find the middle index in array
- Product of array except self
- Maximum product subarray
- Number of ways to split array
- Range Sum Query 2D
4. Слайдінг Вікно
Опис: Слайдінг вікно — це підмасив або підрядок, який рухається по даних для ефективного вирішення проблем за лінійний час.
Фіксований розмір
- Maximum Sum Subarray of Size K
- Number of Subarrays having Average Greater or Equal to Threshold
- Repeated DNA sequences
- Permutation in String
- Sliding Subarray Beauty
- Sliding Window Maximum
Змінний розмір
- Longest Substring Without Repeating Characters
- Minimum Size Subarray Sum
- Subarray Product Less Than K
- Max Consecutive Ones
- Fruits Into Baskets
- Count Number of Nice Subarrays
- Minimum Window Substring: Minimum Window Substring
5. Два вказівники
Опис: Техніка з двома вказівниками передбачає наявність двох різних індексів, які рухаються через вхідні дані з різною швидкістю для вирішення різних проблем з масивами або зв'язаними списками.
- Two Sum II — Input Array is Sorted
- Dutch National Flag: Sort Colors
- Next Permutation
- Bag of Tokens
- Container with most water
- Trapping Rain Water
## 6. Циклічне сортування (Індексоване)
Опис: Циклічне сортування — це ефективний підхід до вирішення проблем, де числа мають послідовний порядок і повинні бути розташовані в правильному індексі.
7. Реверсія зв'язного списку (In-place)
Опис: Реверсія зв'язного списку на місці без використання додаткового простору є ключем до вирішення проблем, що вимагають маніпуляцій зі списками на місці.
8. Маніпуляція матрицями
Опис: Проблеми, що стосуються 2D масивів (матриць), часто вирішуються за допомогою обходу рядків і стовпців або маніпуляцій на основі властивостей матриць.
9. Пошук в ширину (BFS)
Опис: BFS досліджує вузли рівень за рівнем за допомогою черги. Він особливо корисний для задач на найкоротший шлях.
10. Пошук в глибину (DFS)
Опис: DFS досліджує гілку до кінця, перш ніж повернутися. Це корисно для обходу графів, пошуку шляхів і пошуку зв'язних компонентів.
- Number of Closed Islands
- Coloring a Border
- DFS from boundary: Number of Enclaves
- Shortest time: Time Needed to Inform all Employees
- Cyclic Find: Find Eventual Safe States
11. Зворотний пошук (Backtracking)
Опис: Зворотний пошук допомагає в задачах, де потрібно досліджувати всі можливі рішення, наприклад, вирішення головоломок, генерація комбінацій або пошук шляхів.
- Permutation ii
- Combination Sum
- Generate Parenthesis
- N-Queens
- Sudoku Solver
- Palindrome Partitioning
- Word Search: Word Search
## 12. Модифікований бінарний пошук
Опис: Модифікована версія бінарного пошуку, яка застосовується до обертованих масивів, не відсортованих масивів або спеціальних умов.
- Search in Rotated Sorted Array
- Find Minimum in Rotated Sorted Array
- Find Peak Element
- Single element in a sorted array
- Minimum Time to Arrive on Time
- Capacity to Ship Packages within ‘d’ Days
- Koko Eating Bananas
- Find in Mountain Array
- Median of Two Sorted Arrays
13. Побітовий XOR
Опис: XOR — це потужний побітовий оператор, який може вирішувати такі проблеми, як пошук єдиного числа або ефективне парування елементів.
- Missing Number
- Single Number ||
- Single Number III
- Find the Original array of Prefix XOR
- XOR Queries of a Subarray
14. Топ ‘K’ елементів
Опис: Цей шаблон використовує купи або quickselect для ефективного знаходження топових ‘K’ найбільших/найменших елементів з набору даних.
15. Об'єднання K списків
Опис: Техніка об'єднання K списків використовує купу для ефективного об'єднання кількох відсортованих списків або масивів.
- Find K Pairs with Smallest Sums
- Kth Smallest Element in a Sorted Matrix
- Merge K Sorted Lists
- Smallest Range: Smallest Range Covering Elements from K Lists
16. Два купи
Опис: Цей шаблон використовує два купи (макс купа та мін купа) для вирішення задач, що стосуються відстеження медіан і ефективного управління динамічними даними.
17. Монотонний стек
Опис: Монотонний стек допомагає вирішувати задачі з діапазонними запитами, підтримуючи стек елементів у зростаючому або спадаючому порядку.
- Next Greater Element II
- Next Greater Node in Linked List
- Daily Temperatures
- Online Stock Span
- Maximum Width Ramp
- Largest Rectangle in Histogram
## Дерев’яні структури
1. Прохід по рівнях (BFS в бінарному дереві)
- Level order Traversal
- Zigzag Level order Traversal
- Even Odd Tree
- Reverse odd Levels
- Deepest Leaves Sum
- Add one row to Tree
- Maximum width of Binary Tree
- All Nodes Distance K in Binary tree
2. Побудова дерева
- Construct BT from Preorder and Inorder
- Construct BT from Postorder and Inorder
- Maximum Binary Tree
- Construct BST from Preorder
3. Проблеми, пов'язані з висотою
4. Проблеми шляху від кореня до листа
- Binary Tree Paths
- Path Sum ii
- Sum Root to Leaf numbers
- Smallest string starting from Leaf
- Insufficient nodes in root to Leaf
- Pseudo-Palindromic Paths in a Binary Tree
- Binary Tree Maximum Path Sum
5. Проблема предка
- LCA of Binary Tree
- Maximum difference between node and ancestor
- LCA of deepest leaves
- Kth Ancestor of a Tree Node
6. Бінарне дерево пошуку
- Validate BST
- Range Sum of BST
- Minimum Absolute Difference in BST
- Insert into a BST
- LCA of BST
## Динамічне програмування
1. Взяти / Не взяти (DP)
Опис: Рішення задач оптимізації, таких як вибір елементів з максимальною/мінімальною вартістю за певних умов.
2. Нескінченний запас (DP)
Опис: Подібно до задачі рюкзака 0/1, але елементи можна вибирати кілька разів.
3. Найдовша зростаюча підпослідовність
Опис: Пошук найдовшої підпослідовності зростаючих елементів у заданій послідовності.
- Longest Increasing Subsequence
- Largest Divisible Subset
- Maximum Length of Pair Chain
- Number of LIS
- Longest String Chain
4. DP на решітках
Опис: Динамічне програмування на матрицях передбачає розв'язання задач, які можна розділити на менші накладаються підзадачі в межах матриці.
- Unique Paths ii
- Minimum Path Sum
- Triangle
- Minimum Falling Path Sum
- Maximal Square
- Cherry Pickup
- Dungeon Game: Dungeon Game
5. DP на рядках
Опис: Задачі на дві строки, де необхідно зосередитися на тому, що відбувається, коли останні символи двох підстрічок однакові, тобто, співпадають.
- Longest Common Subsequence
- Longest Palindromic Subsequence
- Palindromic Substrings
- Longest Palindromic Substrings
- Edit Distance
- Minimum ASCII Delete Sum for Two Strings
- Distinct Subsequences
- Shortest Common Supersequence
- Wildcard Matching
6. DP на акціях
Опис: Техніка, спрямована на максимізацію прибутку від купівлі та продажу акцій з урахуванням обмежень.
- Buy and Sell Stocks ii
- Buy and Sell Stocks iii
- Buy and Sell Stocks iv
- Buy and Sell Stocks with Cooldown
- Buy and Sell Stocks with Transaction fee
7. Розподіл DP (MCM)
Опис: Це включає послідовність, яку потрібно поділити на частини оптимальним способом.
Опис: Метою часто є мінімізація або максимізація функції вартості, такої як час обчислень, множення або інша метрика, шляхом дослідження всіх можливих розбиттів і комбінування результатів з підзадач.
- Розбиття масиву для максимальної суми
- Лопання кульок
- Мінімальна вартість для різання палички
- Поділ на паліндроми ii
20. Графи
Топологічне сортування
Опис: Топологічне сортування корисне для задач, що потребують вирішення залежностей (InDegree) у орієнтованих ациклічних графах (DAG).
Об'єднання і пошук (Disjoint Set)
Опис: Об'єднання і пошук (або Disjoint Set) використовуються для вирішення задач, що пов'язані з підключенням або групуванням, часто в графах.
- Кількість операцій для підключення мережі
- Зайвий зв'язок
- Злиття акаунтів
- Задоволеність рівнянь рівності
Алгоритми графів
Опис: Просунуті алгоритми графів використовуються для вирішення складних задач, таких як знаходження найкоротших шляхів, мінімальні останні дерева та цикли графів.
- Алгоритм Крускала: Мінімальна вартість підключення всіх точок
- Алгоритм Дейкстри: Найдешевші рейси в межах K зупинок
- Алгоритм Флойда-Уоршелла: Знайти місто з найменшою кількістю сусідів на заданій відстані
- Алгоритм Беллмана-Форда: Затримка мережі
21. Жадібні алгоритми
Опис: Жадібні алгоритми роблять локально оптимальні вибори на кожному кроці, що призводить до глобального оптимального рішення для задач, таких як планування та розподіл ресурсів.
- Гра стрибків ii
- АЗС
- Мішок з токенами
- Човни для порятунку людей
- Коливна підпослідовність
- Кооперативні поїздки
- Цукерки
22. Проектування структури даних
Опис: Це включає створення власних структур даних для ефективного виконання специфічних операцій, таких як керування доступом до даних, оновлення та використання пам'яті.
Опис: Зосереджено на оптимізації продуктивності та управлінні ресурсами.
- Проектування Twitter
- Проектування історії браузера
- Проектування кругового двійкового черги
- Масив моментальних знімків
- Кеш LRU
- Кеш LFU
Деякі корисні статті на LeetCode для кращого розуміння!
Два вказівники
Сковзаюче вікно
Жадібні алгоритми
Зв'язаний список
Дерева
Бінарний пошук
Динамічне програмування (DP)
Графи
Маніпуляції з бітами
- Рішення проблем з маніпуляцією бітами
- Всі типи патернів для маніпуляцій з бітами та як їх використовувати
Перекладено з: DSA Patterns