DSA Workbook
539 problems grouped by algorithmic pattern. Each entry has a paraphrased problem statement, examples, hints, a C++ solution, an editorial walk-through, and a pattern-revision callout.
Two Pointers
27 problems Converging or parallel pointers scan arrays and strings in linear time, replacing nested O(n²) loops with single O(n) sweeps. Most useful when the data is sorted or has a symmetric structure (palindromes, pair sums).
Two Pointers
27 problems- Easy
- Easy
- Medium
- Medium
- Medium
- Medium
- Easy
- Medium
- Easy
- Hard
- Hard
- Hard
- Hard
- Hard
- Hard
- Medium
- Easy
- Easy
- Easy
- Medium
- Easy
- Medium
- Medium
- Medium
- Easy
- Easy
- Easy
Fast and Slow Pointers
10 problems Floyd's tortoise-and-hare. Speed-2 vs speed-1 pointers detect cycles, find midpoints, and solve linked-list-as-functional-graph problems in O(1) extra space. The atomic cycle-detection primitive.
Fast and Slow Pointers
10 problems- Easy
- Easy
- Easy
- Medium
- Medium
- Easy
- Medium
- Medium
- Medium
- Medium
Sliding Window
19 problems Maintain a contiguous window over an array or string, expanding and shrinking to preserve an invariant. Powers most 'longest / shortest / count substring with property X' problems, often turning O(n²) brute force into O(n).
Sliding Window
19 problems- Medium
- Hard
- Medium
- Easy
- Medium
- Hard
- Hard
- Medium
- Medium
- Medium
- Easy
- Easy
- Hard
- Hard
- Hard
- Hard
- Medium
- Medium
- Medium
Intervals
11 problems Sort intervals by start, then sweep linearly. Merge, intersect, count overlaps, and detect meeting-room collisions all fall out of a single linear pass. A min-heap of end times adds resource-allocation flavors on top.
Intervals
11 problems- Medium
- Medium
- Medium
- Medium
- Hard
- Medium
- Medium
- Medium
- Medium
- Hard
- Hard
In-Place Linked List
14 problems Reverse, reorder, rotate, and partition linked lists by rewiring `next` pointers — O(1) space. Building blocks: dummy head, three-pointer reversal, head-insertion within a sublist, and the split-reverse-weave composition.
In-Place Linked List
14 problems- Easy
- Medium
- Hard
- Medium
- Medium
- Medium
- Medium
- Medium
- Easy
- Easy
- Easy
- Medium
- Medium
- Medium
Heaps
12 problems Priority queues answer 'what's the smallest or largest right now?'. Use bounded heaps for top-k, dual heaps for running medians, and lazy deletion for sliding-window extrema.
Heaps
12 problems- Hard
- Hard
- Hard
- Medium
- Hard
- Medium
- Medium
- Medium
- Medium
- Easy
- Medium
- Hard
K-way Merge
7 problems Merge k sorted streams via a min-heap of frontiers — one entry per stream. The foundation for kth-smallest across multiple sources, sorted-matrix queries, and external sorting.
K-way Merge
7 problems- Easy
- Hard
- Medium
- Medium
- Medium
- Medium
- Medium
Top K Elements
18 problems Bounded heap of size k: min-heap for top-k-largest, max-heap for top-k-smallest. When one-shot O(n) average is acceptable, quickselect partitions around a pivot instead.
Top K Elements
18 problems- Medium
- Easy
- Medium
- Medium
- Medium
- Medium
- Medium
- Easy
- Easy
- Hard
- Hard
- Hard
- Hard
- Hard
- Hard
- Medium
- Medium
- Easy
Modified Binary Search
20 problems Binary search beyond plain sorted arrays: rotated, bitonic, peaked, on the answer value, or on a real-valued range. The only requirement is a monotone predicate.
Modified Binary Search
20 problems- Medium
- Easy
- Easy
- Medium
- Medium
- Hard
- Easy
- Medium
- Medium
- Easy
- Hard
- Hard
- Hard
- Hard
- Hard
- Hard
- Medium
- Easy
- Medium
- Medium
Subsets
8 problems DFS enumeration of subsets, permutations, and combinations. Start-index for combinations; in-place swap for permutations; sort-and-skip for dedup on duplicate inputs.
Subsets
8 problems- Medium
- Medium
- Medium
- Medium
- Medium
- Medium
- Medium
- Medium
Greedy Techniques
22 problems Take the locally-best move and prove (via exchange argument or matroid) that it leads to a globally optimal solution. Sorts, heaps, and running aggregates are the usual scaffolding.
Greedy Techniques
22 problems- Medium
- Medium
- Medium
- Medium
- Hard
- Medium
- Medium
- Medium
- Hard
- Medium
- Easy
- Easy
- Easy
- Hard
- Hard
- Medium
- Hard
- Medium
- Hard
- Medium
- Medium
- Hard
Backtracking
20 problems Recursive search with pruning. Build candidate solutions incrementally and abort branches that violate constraints early. Bitmasks compress constraint state when feasible.
Backtracking
20 problems- Medium
- Medium
- Hard
- Medium
- Easy
- Medium
- Hard
- Medium
- Easy
- Hard
- Medium
- Easy
- Medium
- Hard
- Hard
- Hard
- Medium
- Hard
- Easy
- Medium
Dynamic Programming
38 problems Express the answer as overlapping subproblems with optimal substructure; cache results. Flavors range from 1D rolling DP through 2D knapsack, interval DP, state machines, and bitmask DP.
Dynamic Programming
38 problems- Medium
- Easy
- Medium
- Medium
- Medium
- Medium
- Medium
- Medium
- Easy
- Medium
- Easy
- Medium
- Medium
- Medium
- Hard
- Medium
- Hard
- Hard
- Easy
- Medium
- Hard
- Hard
- Hard
- Hard
- Hard
- Hard
- Medium
- Hard
- Hard
- Easy
- Medium
- Hard
- Medium
- Medium
- Hard
- Medium
- Hard
- Hard
Cyclic Sort
6 problems Place value `v` at index `v - 1` via in-place swaps. The canonical O(n) / O(1) primitive for missing-or-duplicate problems on arrays containing the integers `[1, n]`.
Cyclic Sort
6 problems- Easy
- Hard
- Medium
- Easy
- Easy
- Easy
Topological Sort
11 problems Linear ordering of a DAG respecting dependencies. Kahn's BFS for indegree-based ordering; DFS post-order for the reverse. Cycle detection comes for free.
Topological Sort
11 problems- Hard
- Medium
- Medium
- Easy
- Medium
- Medium
- Hard
- Hard
- Hard
- Medium
- Hard
Sort and Search
18 problems Sorting exposes structure that a linear or binary-search sweep can then exploit. The most versatile 'preprocess then query' pattern — applies whenever pairs, ranges, or extremes matter.
Sort and Search
18 problems- Medium
- Easy
- Hard
- Medium
- Easy
- Easy
- Hard
- Medium
- Easy
- Medium
- Medium
- Hard
- Easy
- Medium
- Medium
- Hard
- Medium
- Hard
Matrices
18 problems Treat the 2D grid as the data structure. In-place markers, layer-by-layer iteration, spiral traversal, transpose-then-reverse rotation, prefix sums, and staircase walks.
Matrices
18 problems- Medium
- Medium
- Medium
- Medium
- Easy
- Easy
- Medium
- Medium
- Medium
- Easy
- Easy
- Hard
- Hard
- Hard
- Hard
- Hard
- Hard
- Medium
Stacks
17 problems LIFO order captures 'last-seen-first-out' semantics. Monotonic stacks find next-greater or next-smaller in O(n); expression evaluation and nested-structure validation are direct applications.
Stacks
17 problems- Easy
- Hard
- Easy
- Medium
- Medium
- Medium
- Easy
- Medium
- Medium
- Easy
- Hard
- Hard
- Hard
- Medium
- Hard
- Hard
- Medium
Graphs
17 problems Encode relations as edges. BFS for shortest unweighted paths, DFS for connectivity and topological order, Dijkstra / Bellman-Ford for weighted shortest paths, A* when a heuristic is available.
Graphs
17 problems- Medium
- Medium
- Medium
- Medium
- Hard
- Hard
- Easy
- Medium
- Medium
- Medium
- Easy
- Easy
- Hard
- Hard
- Hard
- Hard
- Medium
Tree DFS
21 problems Recursive depth-first traversal. Pre / in / post-order, path-sum aggregation, LCA, height, diameter, serialization, BST validation — most tree questions reduce to a single DFS with carefully chosen return values.
Tree DFS
21 problems- Hard
- Easy
- Hard
- Medium
- Medium
- Medium
- Easy
- Medium
- Medium
- Easy
- Easy
- Medium
- Medium
- Medium
- Hard
- Medium
- Hard
- Hard
- Easy
- Easy
- Easy
Tree BFS
13 problems Level-order traversal via a queue. Right-side view, zigzag, per-level aggregation, connecting next-right pointers, and shortest path in unweighted trees.
Tree BFS
13 problems- Medium
- Medium
- Medium
- Hard
- Easy
- Hard
- Medium
- Easy
- Hard
- Hard
- Hard
- Easy
- Medium
Trie
15 problems Prefix tree for word lookups, autocomplete, prefix counting, and word-search-in-grid. Each node has up to |Σ| children; operations are O(L) in the word length.
Trie
15 problems- Medium
- Medium
- Hard
- Medium
- Medium
- Medium
- Medium
- Easy
- Easy
- Hard
- Hard
- Hard
- Medium
- Easy
- Medium
Hash Maps
29 problems Constant-time keyed lookup. Frequency counting, complement search, anagram grouping, two-sum, and running aggregations keyed by computed signatures — the most reused primitive in the entire toolkit.
Hash Maps
29 problems- Easy
- Medium
- Easy
- Easy
- Easy
- Medium
- Easy
- Medium
- Easy
- Easy
- Medium
- Medium
- Medium
- Medium
- Hard
- Medium
- Hard
- Hard
- Easy
- Easy
- Medium
- Easy
- Medium
- Easy
- Medium
- Easy
- Medium
- Medium
- Easy
Tracking Patterns
18 problems Run a rolling aggregation (sum, count, last-seen index) over a stream and test it against a target. A cousin of hash maps that emphasizes mutable state over time.
Tracking Patterns
18 problems- Easy
- Medium
- Easy
- Medium
- Hard
- Easy
- Medium
- Medium
- Easy
- Medium
- Medium
- Medium
- Hard
- Hard
- Easy
- Medium
- Easy
- Easy
Union Find
14 problems Disjoint-set forest with path compression and union by rank. Maintain connected components dynamically as edges arrive in near-O(1) per op (inverse Ackermann).
Union Find
14 problems- Medium
- Medium
- Medium
- Medium
- Hard
- Medium
- Medium
- Hard
- Medium
- Easy
- Hard
- Hard
- Hard
- Hard
Custom Data Structs
16 problems Compose primitives — hash + linked list, twin heaps, segment trees, balanced BSTs — to satisfy an unusual operation spec in optimal time. LRU, LFU, time-keyed stores, snapshot arrays.
Custom Data Structs
16 problems- Medium
- Medium
- Medium
- Medium
- Medium
- Hard
- Medium
- Hard
- Easy
- Easy
- Easy
- Easy
- Hard
- Hard
- Hard
- Hard
Bitwise Operations
17 problems Each bit is a flag or part of an integer encoding. XOR cancels pairs, AND masks, popcount counts set bits. Subset masks, parity tricks, position toggles, and arithmetic without operators.
Bitwise Operations
17 problems- Medium
- Easy
- Easy
- Easy
- Easy
- Easy
- Medium
- Medium
- Medium
- Medium
- Easy
- Medium
- Hard
- Hard
- Hard
- Easy
- Easy
Math & Geometry
37 problems Number theory (GCD, modular arithmetic, primes), big-number arithmetic on strings, coordinate geometry, area and orientation tests, and modular exponentiation.
Math & Geometry
37 problems- Medium
- Medium
- Medium
- Medium
- Hard
- Medium
- Easy
- Easy
- Medium
- Easy
- Easy
- Medium
- Medium
- Hard
- Hard
- Medium
- Hard
- Hard
- Hard
- Easy
- Medium
- Easy
- Easy
- Hard
- Medium
- Easy
- Easy
- Easy
- Medium
- Medium
- Hard
- Easy
- Easy
- Easy
- Hard
- Medium
- Easy
Review Challenges
46 problems A grab-bag of foundational problems that appear in interviews regardless of pattern. Two Sum, Maximum Subarray, Trapping Rain Water — the canonical warm-ups.
Review Challenges
46 problems- Medium
- Medium
- Easy
- Medium
- Easy
- Medium
- Medium
- Easy
- Easy
- Easy
- Medium
- Medium
- Medium
- Medium
- Medium
- Medium
- Medium
- Easy
- Medium
- Hard
- Hard
- Medium
- Medium
- Medium
- Medium
- Easy
- Medium
- Medium
- Medium
- Medium
- Easy
- Easy
- Medium
- Hard
- Medium
- Medium
- Medium
- Easy
- Medium
- Medium
- Easy
- Easy
- Hard
- Medium
- Medium
- Hard