TGViewer
Java Portal | Программирование Java Portal | Программирование @java_iibrary · 11.6K subscribers
Post #1593 3.27K
Algorithmic Thinking Patterns

🔸Паттерн: Two Pointers
Суть идеи: Ввести два индекса и двигать их по массиву
Когда использовать: Отсортированные массивы, удаление дубликатов, реверс
Типовые задачи: Reverse array in-place, 3Sum, Remove Duplicates

🔸Паттерн: Sliding Window
Суть идеи: Оптимизация задач на подмассивы путём расширения/сжатия окна
Когда использовать: Строки, макс/мин в окне, шаблоны фиксированной длины
Типовые задачи: Longest substring w/o repeats, Max sum of k-size subarray

🔸Паттерн: Binary Search on Answer
Суть идеи: Вместо поиска элемента ищем min/max значение, удовлетворяющее условию
Когда использовать: Монотонное пространство поиска
Типовые задачи: Min eating speed, Aggressive cows, Capacity to ship packages

🔸Паттерн: Prefix Sum / Difference Array
Суть идеи: Предобработка для ответов на запросы за O(1)
Когда использовать: Сумма/частота на интервалах, перекрывающиеся диапазоны
Типовые задачи: Subarray sum = K, Difference array for range updates

🔸Паттерн: Greedy
Суть идеи: Выбираем на каждом шаге локально лучший вариант, надеясь на глобальный оптимум
Когда использовать: Когда выбор можно отсортировать или сравнить
Типовые задачи: Activity selection, Gas Station, Jump Game

🔸Паттерн: Backtracking
Суть идеи: Перебираем все варианты и откатываемся с неверных путей
Когда использовать: Комбинации, перестановки, ограничения
Типовые задачи: N-Queens, Sudoku Solver, Subset Sum

🔸Паттерн: Bitmasking
Суть идеи: Используем биты для представления подмножеств или флагов
Когда использовать: Маленькие N (N ≤ 20), переключаем состояния
Типовые задачи: Count set bits, Subset sum, Traveling Salesman

🔸Паттерн: Union-Find (DSU)
Суть идеи: Эффективно объединяем и находим компоненты
Когда использовать: Связность, обнаружение циклов
Типовые задачи: Number of Provinces, Kruskal's MST, Friend Circles

🔸Паттерн: Monotonic Stack / Queue
Суть идеи: Поддерживаем монотонно возрастающую или убывающую структуру
Когда использовать: Следующий больше/меньше, максимум по диапазону
Типовые задачи: Daily Temperatures, Largest rectangle in histogram

🔸Паттерн: Topological Sort
Суть идеи: Линейный порядок задач по зависимостям
Когда использовать: Ацикличные графы (DAG), планирование
Типовые задачи: Course Schedule, Build Order, Alien Dictionary

🔸Паттерн: Dynamic Programming (Tabulation)
Суть идеи: Итеративное решение снизу вверх с мемоизацией
Когда использовать: Пересекающиеся подзадачи
Типовые задачи: 0/1 Knapsack, Edit Distance, House Robber

🔸Паттерн: Divide & Conquer
Суть идеи: Рекурсивное деление входных данных
Когда использовать: Сортировка, сложные рекурсии
Типовые задачи: Merge Sort, Count Inversions, Median of Two Sorted Arrays

🔸Паттерн: DFS with Memoization
Суть идеи: Сохраняем уже посчитанные значения, чтобы не вычислять повторно
Когда использовать: DAG, рекурсивное ДП
Типовые задачи: Word Break, Unique Paths III, Longest Increasing Path

🔸Паттерн: Meet in the Middle
Суть идеи: Делим массив пополам, решаем обе части и объединяем
Когда использовать: N ≤ 40, полный перебор слишком дорог
Типовые задачи: Partition to Equal Sum, K-Sum Variants

🔸Паттерн: Trie-Based Search
Суть идеи: Деревья префиксов
Когда использовать: Поиск слов, автодополнение
Типовые задачи: Implement Trie, Replace Words, Word Squares

🔸Паттерн: Segment Tree / BIT
Суть идеи: Эффективные запросы и обновления на диапазонах
Когда использовать: Большие массивы, частые модификации
Типовые задачи: Range sum/min/max, Inversions, Lazy Propagation

🔸Паттерн: Floyd’s Cycle Detection
Суть идеи: Обнаружение цикла с быстрым и медленным указателями
Когда использовать: Связные списки, конечные автоматы
Типовые задачи: Linked List Cycle, Happy Number

👉 Java Portal
  • ❤ 4
  • 👍 4
  • 🔥 3
  • 😁 1
  • 👀 1
More from @java_iibrary
  1. Oct 1, 2026Spring Boot 4: приближение срока истечения SSL-сертификатов больше не меняет статус health…
  2. Sep 30, 2026Почему один и тот же Java-файл .class запускается на Windows, Linux и macOS без перекомпил…
  3. Sep 30, 2026Docker прост, пока всё работает. Но что делать, если контейнер постоянно перезапускается,…
  4. Sep 29, 2026Эволюция языков программирования 1940-е → Машинный код ⬇️ 1950-е → Ассемблер ⬇️ 1960-е → F…
  5. Sep 29, 2026Большинство Java-разработчиков используют эти термины каждый день. Удивительно, но многие…
  6. Sep 28, 2026💡 Java: не создавайте ресурсоёмкие объекты, пока они действительно не понадобятся. ✅ Иниц…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →