Understand the algorithm.
Not just the answer.
Step through real code, learn the patterns behind the problems you'll meet, and let spaced review keep it in your head.
// try it: Two pointers
Open the full lesson →step 1 / 11
1function twoSum(nums, target) {2 let lo = 0, hi = nums.length - 1;3 while (lo < hi) {4 const sum = nums[lo] + nums[hi];5 if (sum === target) return [lo, hi];6 if (sum < target) lo++;7 else hi--;8 }9 return null;10}- target
- = 10
- 1lo
- 3
- 4
- 6
- 8
- 11hi
The array is sorted. lo starts at the left end, hi at the right end.
Built for how memory actually works.
01 / visualize
Step through every line
Watch variables change as the code runs, forward and back, one step at a time.
02 / recognize
Spot the pattern first
Drills train you to name the pattern before you write code.
03 / retain
5-minute daily review
Spaced repetition built in, capped so the queue never explodes.
04 / progress
One clear path
Big-O to dynamic programming, in order. Track patterns mastered, not streaks.
The path
9 modules, each one building on the last.
- 01Big-O: measuring growthsoonfree
- 02Arrays and hash mapssoonfree
- 03Sorting basics1 lessonfree
- 04Two pointers and sliding window2 lessonsfree
- 05Stacks, queues and linked lists3 lessonsfree
- 06Recursionsoonfree
- 07Binary search1 lessonfree
- 08Trees: BFS and DFSsoonfree
- 09Dynamic programmingsoonfree
// new lessons ship regularly. Modules marked soon are on the way.
Pricing
Start free. Upgrade when it clicks.
proComing soon
- Everything in free
- Every lesson unlocked
- Unlimited pattern drills
- Mastery insights