We're going to go through a bullet proof study plan to get you prepared for 90% of interviews that require data structures and algorithms.
Besides passing interviews, the benefits of learning data structures and algorithms are:
increased problem solving ability
exposure to fundamental computer science concepts
confidence
Unfortunately, most people do random LeetCode problems expecting to come out on the other end interview ready. That's like going to the gym with no plan, throwing random weights around and expecting to get buff.
Study concepts, not problems.
I spent over 10k learning data structures and algos over the years. I'm going to break down exactly how I went from not knowing Big O to making it to the final rounds at companies like Google and Facebook and landing offers from high growth startups.
Here's what you should study, in order:
Big O Notation
Estimated Study Time
1 day
Concepts:
Space vs time complexity
Linear time
Logarithmic time
Factorial time
Constant time
Exponential time
How to Study:
Read: https://www.freecodecamp.org/news/big-o-notation-why-it-matters-and OR https://www.digitalocean.com/community/tutorials/js-big-o-notation#o-n-2
Write the Big O next to every problem you solve
Sorting and Searching
Estimated Study Time
1 week
Concepts:
Merge sort
Quick sort
Bubble sort (and why you would never use this!)
Hoare vs Lomuto partitioning https://www.geeksforgeeks.org/hoares-vs-lomuto-partition-scheme-quicksort/ (BONUS points)
Binary Search
Also - know the Big O space and runtimes for each of these algos
How to study:
Create each sorting and searching algo from scratch
Stacks and Queues
Estimated Study Time
1 day
Concepts:
Stacks
Queues
LIFO
FIFO
How to study:
Create a stack and queue from scratch
Heaps
Estimated Study Time
2 days
Concepts:
Max heap
Min heap
Priority queue
How to study:
Create a max and min heap from scratch
It can be difficult to know when to use one of these structures and they are not native to JS - know some good use cases for them
Trees and Tries
Estimated Study Time
1 week
Concepts:
Binary trees and Binary search trees (there's a difference)
Depth first search
Breadth first search
What the heck is a trie?
In-order traversal
Post-order traversal
Pre-order traversal
N-ary trees
How to study:
Create a binary tree, binary search tree and a trie from scratch
Create all the different methods for sorting and searching your trees/tries
Think of the use cases for tries and trees - when and why would you use one over the other?
Recursion
Estimated Study Time
1 week
Concepts:
Recursion vs backtracking
Call stack
Stack overflows (the concept, not the site)
How to study:
Solve problems that require finding combinations and permutations
Create a recursive template you can leverage - you should see patterns emerge for both backtracking problems and recursive problems
This is often the most difficult concept so plan to come back often
Linked Lists
Estimated Study Time
1 week
Concepts:
Singly linked list
Doubly linked list
Benefits of a LL over a stack or a queue
How to study:
Create an LRU cache (look it up) leveraging a LL
Practice problems requiring you to remove the nth-child in a LL
Understand when to use a LL over a stack or a queue
Graphs
Estimated Study Time
1 week
Concepts:
Directed vs undirected graphs
Adjacency list
Adjacency matrix
Depth first search
Breadth first search
Djikstra and A* algorithms
How to study:
Create graph structures using adjacency and matrix representations with DFS and BFS methods
How is DFS on a graph different than a tree? BFS?
Solve "flood-fill" problem
Solve problems where you need to detect loops
Dynamic Programming
Estimated Study Time
1 week
Concepts:
Dynamic programming vs recursion
Top down vs bottom up memoization
How to study:
Solve Fibonnaci using DP
Miscellaneous but Important!
Estimated Study Time
2 weeks
Concepts:
2 pointers
Frequency counters
Sliding window
Detecting intervals
How to study:
Look up <concept> + Leetcode and solve at least 2 problems under each concept
Conclusion
Holy moly, that's a lot to study... or is it? I gave fairly aggressive estimates for how long I would expect you to take to study the bare minimum.
It's enough to get a solid understanding of the most common concepts and can be done over a couple months.
For most interviews, that's really all you need.
If you want to become a software developer and build complex stuff that does not suck. Apply to join us at Parsity.io
if(youKnowHowToCode) {
checkOut(
JavaScriptProsApp.com)
}