Published Dec 3, 2022

Don't Study 500 LeetCode Problems, Do This Instead

avatar

By Brian Jenney

Real Talk JS - no nonsense tips for JavaScript developers looking to get ahead in their careers.

Image

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:


Sorting and Searching

Estimated Study Time

  • 1 week

Concepts:

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:


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)
}

Comments