Step 2 of 2 · your path
DSA, Beginner
Start with complexity analysis and the JavaScript toolkit, then what every pattern is built from: arrays, prefix sums, hashing, two pointers, sliding window, binary search, recursion, sorting, stacks and linked lists.
Your progress
0 / 12 done
Up next
Complexity analysis
30 min read · 7 exercises
The order I'd read them in
About 6 h 3 min of reading. Tick off what you've read, it is remembered on this device.
- Complexity analysisThe one skill every interviewer is silently scoring, whether they say so or not.
- The JavaScript toolkit for DSAA correct algorithm can still fail in JavaScript: a slow shift, a sort that puts 10 before 2, a product that loses digits, a stack that runs out. This is the reference for all of it.
16 exercises
- Arrays & stringsThe two data structures every other pattern is built on top of.
32 exercises
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 10 tests · beginner
- 8 tests · intermediate
- 8 tests · intermediate
- 9 tests · intermediate
- 9 tests · beginner
- 8 tests · intermediate
- 8 tests · beginner
- 7 tests · beginner
- 7 tests · beginner
- 7 tests · intermediate
- 8 tests · intermediate
- 7 tests · intermediate
- 7 tests · intermediate
- 7 tests · beginner
- Prefix sums and difference arraysStore the running total once, and a whole family of range questions becomes one subtraction.
21 exercises
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- HashingThe single most common way an O(n²) brute force becomes O(n).
20 exercises
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · intermediate
- 7 tests · intermediate
- 9 tests · intermediate
- 8 tests · intermediate
- 9 tests · intermediate
- 8 tests · intermediate
- Two pointersOne pass, two positions — how an O(n²) search collapses to O(n).
25 exercises
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · advanced
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 7 tests · intermediate
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · intermediate
- Sliding windowStop re-scanning the same elements — slide the window instead.
19 exercises
- 8 tests · intermediate
- 8 tests · advanced
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 9 tests · intermediate
- 8 tests · intermediate
- Binary searchHalving the search space is the single highest-leverage trick in DSA.
24 exercises
- 9 tests · beginner
- 8 tests · beginner
- 9 tests · intermediate
- 8 tests · intermediate
- 9 tests · intermediate
- 9 tests · intermediate
- 9 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · advanced
- 8 tests · advanced
- 9 tests · beginner
- 9 tests · beginner
- 8 tests · intermediate
- 7 tests · beginner
- 7 tests · beginner
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 7 tests · beginner
- 7 tests · intermediate
- 7 tests · intermediate
- Basic recursionTrees, backtracking, DP and divide-and-conquer are all recursion wearing a costume.
- Sorting algorithmsYou'll rarely hand-write one, but you'll constantly need to reason about them.
15 exercises
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 9 tests · advanced
- 10 tests · advanced
- 9 tests · beginner
- 8 tests · intermediate
- 8 tests · beginner
- 9 tests · intermediate
- 8 tests · advanced
- 8 tests · beginner
- 7 tests · beginner
- 9 tests · intermediate
- 8 tests · intermediate
- Stacks & queuesTwo rules for order, and half of interview problems secretly need one of them.
16 exercises
- 9 tests · intermediate
- 9 tests · beginner
- 9 tests · beginner
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · advanced
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · beginner
- 7 tests · beginner
- 7 tests · beginner
- 8 tests · intermediate
- 9 tests · intermediate
- 9 tests · intermediate
- 7 tests · intermediate
- Linked listsNo index math, no shifting cost — the tradeoff array questions can't make.
29 exercises
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · beginner
- 7 tests · beginner
- 8 tests · beginner
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · advanced
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · advanced
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · beginner
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · intermediate
- 8 tests · advanced
Practice at this level
Every exercise opens in the editor with tests you can run.
- Complexity analysis · 8 tests
- Complexity analysis · 8 tests
- Complexity analysis · 9 tests
- Hashing · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Two pointers · 8 tests
- Two pointers · 8 tests
- Two pointers · 8 tests
- Two pointers · 8 tests
- Binary search · 9 tests
- Binary search · 8 tests
- Binary search · 9 tests
- Binary search · 8 tests
- Binary search · 9 tests
- Binary search · 9 tests
- Binary search · 9 tests
- Binary search · 8 tests
- Binary search · 8 tests
- Binary search · 8 tests
- Binary search · 8 tests
- Binary search · 8 tests
- Binary search · 9 tests
- Binary search · 9 tests
- Binary search · 8 tests
- Hashing · 8 tests
- Hashing · 8 tests
- Hashing · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 8 tests
- Hashing · 8 tests
- Hashing · 8 tests
- Hashing · 8 tests
- Hashing · 8 tests
- Hashing · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Sorting algorithms · 8 tests
- Sorting algorithms · 8 tests
- Sorting algorithms · 8 tests
- Sorting algorithms · 8 tests
- Sorting algorithms · 9 tests
- Sorting algorithms · 10 tests
- Sorting algorithms · 9 tests
- Basic recursion · 8 tests
- Basic recursion · 8 tests
- Basic recursion · 8 tests
- Basic recursion · 8 tests
- Stacks & queues · 9 tests
- Stacks & queues · 9 tests
- Stacks & queues · 9 tests
- Stacks & queues · 8 tests
- Stacks & queues · 8 tests
- Stacks & queues · 8 tests
- Stacks & queues · 8 tests
- Hashing · 8 tests
- Two pointers · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 10 tests
- Arrays & strings · 8 tests
- Two pointers · 8 tests
- Sliding window · 8 tests
- Hashing · 8 tests
- Stacks & queues · 8 tests
- Arrays & strings · 8 tests
- Arrays & strings · 9 tests
- Arrays & strings · 9 tests
- Arrays & strings · 8 tests
- Sliding window · 8 tests
- Sliding window · 8 tests
- Hashing · 8 tests
- Hashing · 8 tests
- Stacks & queues · 8 tests
- Two pointers · 8 tests
- Two pointers · 8 tests
- Two pointers · 8 tests
- Sliding window · 8 tests
- Sliding window · 8 tests
- Sliding window · 8 tests
- Sliding window · 8 tests
- Sliding window · 8 tests
- Sliding window · 8 tests
- Sliding window · 8 tests
- Two pointers · 8 tests
- Two pointers · 8 tests
- Two pointers · 8 tests
- Arrays & strings · 7 tests
- Arrays & strings · 7 tests
- Arrays & strings · 8 tests
- Arrays & strings · 7 tests
- Arrays & strings · 7 tests
- Arrays & strings · 7 tests
- Arrays & strings · 7 tests
- Basic recursion · 7 tests
- Basic recursion · 6 tests
- Basic recursion · 7 tests
- Basic recursion · 7 tests
- Basic recursion · 7 tests
- Basic recursion · 7 tests
- Basic recursion · 8 tests
- Basic recursion · 9 tests
- Basic recursion · 7 tests
- Binary search · 7 tests
- Binary search · 7 tests
- Binary search · 8 tests
- Binary search · 8 tests
- Binary search · 8 tests
- Binary search · 8 tests
- Binary search · 7 tests
- Binary search · 7 tests
- Binary search · 7 tests
- Complexity analysis · 8 tests
- Complexity analysis · 7 tests
- Complexity analysis · 8 tests
- Complexity analysis · 7 tests
- Hashing · 8 tests
- Hashing · 8 tests
- Hashing · 7 tests
- Hashing · 9 tests
- Hashing · 8 tests
- JavaScript toolkit · 8 tests
- JavaScript toolkit · 8 tests
- JavaScript toolkit · 8 tests
- JavaScript toolkit · 9 tests
- JavaScript toolkit · 8 tests
- JavaScript toolkit · 8 tests
- JavaScript toolkit · 7 tests
- JavaScript toolkit · 8 tests
- JavaScript toolkit · 7 tests
- JavaScript toolkit · 8 tests
- JavaScript toolkit · 10 tests
- JavaScript toolkit · 8 tests
- JavaScript toolkit · 8 tests
- Linked lists · 8 tests
- Linked lists · 7 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Linked lists · 8 tests
- Prefix sums · 8 tests
- Prefix sums · 8 tests
- Prefix sums · 8 tests
- Prefix sums · 8 tests
- Prefix sums · 8 tests
- Prefix sums · 8 tests
- Prefix sums · 8 tests
- Prefix sums · 8 tests
- Prefix sums · 8 tests
- Prefix sums · 8 tests
- Prefix sums · 8 tests
- Prefix sums · 8 tests
- Sliding window · 8 tests
- Sliding window · 8 tests
- Sliding window · 8 tests
- Sliding window · 8 tests
- Sliding window · 8 tests
- Sliding window · 8 tests
- Sorting algorithms · 8 tests
- Sorting algorithms · 9 tests
- Sorting algorithms · 8 tests
- Sorting algorithms · 7 tests
- Sorting algorithms · 9 tests
- Sorting algorithms · 8 tests
- Stacks & queues · 7 tests
- Stacks & queues · 7 tests
- Stacks & queues · 8 tests
- Stacks & queues · 9 tests
- Stacks & queues · 7 tests
- Two pointers · 7 tests
- Two pointers · 8 tests
- Two pointers · 8 tests
- Two pointers · 8 tests
- Two pointers · 8 tests
- Two pointers · 8 tests
- Two pointers · 8 tests
- Two pointers · 8 tests
- Hashing · 10 tests
- Binary search · 13 tests
- Stacks & queues · 11 tests
- Prefix sums · 12 tests
- Two pointers · 13 tests
- Stacks & queues · 11 tests
- Hashing · 10 tests
- Arrays & strings · 9 tests
- Two pointers · 8 tests