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.