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 are NOT solely interviewing with companies who have a fetish for white-board interviews **check out all the free resources I have here: https://brianjenney.me and then get **my freakin' course (that's not really a course)** https://notanothercourse.carrd.co/