Reusable ways to recognize, model, and solve algorithmic problems.
Backtracking
Patterns for exploring choices while preserving and restoring search state.
Binary Search
Binary-search patterns for answer spaces, order statistics, and optimization.
Dynamic Programming
Ways to define states, transitions, and reusable dynamic-programming structures.
Graphs
Graph patterns covering traversal structure, cycles, ordering, and trees.
Monotonic Structures
Patterns built around maintaining ordered stacks and deques.
Sliding Window
Window patterns for maintaining constraints, counts, extrema, and rolling state.
Strings
Algorithms and patterns for searching, hashing, and working with strings.
Two Pointers
Pointer patterns for partitions, merging, cycles, and coordinated scans.