Skip to content

Latest commit

 

History

History
458 lines (313 loc) · 11.4 KB

study-plan.md

File metadata and controls

458 lines (313 loc) · 11.4 KB
description layout
These are the questions I used for revising each topic, try to solve each topic completely and understand the core components before moving on to the next topic
title description tableOfContents outline pagination
visible
true
visible
visible
true
visible
true
visible
true

Study Plan

{% hint style="info" %} These questions were compiled from the Tech Interview Handbook across its various topics. The order of studying and study plan is also inspired by the Tech Interview Handbook. {% endhint %}

Preface

It took me about a month to complete the study plan (not including the dynamic programming roadmap). It's important to preface that I had completed a data structures & algorithms (DSA) course right before starting my revision so a lot of the fundamentals was fresh in my head. You may find yourself spending more/less time than I did and that is alright.

{% hint style="info" %} Check out my dedicated blog post for the key aspects of preparing for technical interviews: https://blog.woojiahao.com/post/technical-interview-systems/ {% endhint %}

If you are not familiar with fundamental DSA, it is recommended that you read a book on DSA before diving into LeetCode as it will help you better understand how to apply the data structures/algorithms to the problems. You can find my recommendations in the faqs.md.

How to use?

Feel free to refer to the associated sections about each topic (in the left sidebar) to learn the techniques and patterns commonly associated to questions in that topic.

While it is good if you are "discover" these patterns yourself, having them formally introduced can help you to structure your thinking going into each problem.

Notation

  • ⭐ : requires LeetCode premium
  • 🚩 : problems that I found incredibly tricky and often tapped out

Duplicate questions

My recommended approach for duplicate questions is to try the question again but using the associated topic to solve it, rather than glossing over them again.

Week 1

Array
  • Two Sum
  • Best Time to Buy and Sell Stock
  • Product of Array Except Self
  • Maximum Subarray
  • Contains Duplicates
  • Maximum Product Subarray
  • Search in Rotated Sorted Array
  • 3Sum
  • Container With Most Water
  • Sliding Window Maximum 🚩
String
  • Valid Anagram
  • Valid Palindrome
  • Longest Substring Without Repeating Characters
  • Longest Repeating Character Replacement
  • Find All Anagrams in a String 🚩
  • Minimum Window Substring
  • Group Anagrams 🚩
  • Longest Palindromic Substring 🚩
  • Encode and Decode Strings ⭐
Hash Table
  • Two Sum
  • Ransom Note
  • Group Anagrams
  • Insert Delete GetRandom O(1) 🚩
  • First Missing Positive 🚩
  • LRU Cache 🚩
  • All O`one Data Structure 🚩
Recursion
  • Generate Parentheses 🚩
  • Combinations
  • Subsets
  • Letter Combinations of a Phone Number
  • Subsets 2
  • Permutations
  • Sudoku Solver 🚩
  • Strobogrammatic Number 2 ⭐

Week 2

Sorting and Searching
  • Binary Search
  • Search in Rotated Sorted Array
  • Kth Smallest Element in a Sorted Matrix 🚩
  • Search a 2D Matrix
  • Kth Largest Element in an Array
  • Find Minimum in Rotated Sorted Array
  • Median of Two Sorted Arrays 🚩
Matrix
  • Set Matrix Zeroes
  • Spiral Matrix 🚩
  • Rotate Image
  • Valid Sudoku 🚩
Linked List
  • Reverse a Linked List
  • Detect Cycle in a Linked List
  • Merge Two Sorted Lists
  • Merge K Sorted Lists
  • Remove Nth Node From End of List
  • Reorder List
Queue
  • Implement Stack using Queues
  • Implement Queue using Stacks
  • Design Circular Queue
  • Design Hit Counter ⭐
Stack
  • Valid Parentheses
  • Implement Queue using Stacks
  • Implement Stack using Queues
  • Min Stack
  • Asteroid Collision
  • Evaluate Collision
  • Basic Calculator 🚩
  • Basic Calculator 2 🚩
  • Daily Temperature
  • Trapping Rain Water 🚩
  • Largest Rectangle in Histogram 🚩

Week 3

Tree
  • Same Tree
  • Binary Tree Maximum Path Sum 🚩
  • Binary Tree Level Order Traversal
  • Lowest Common Ancestor of a Binary Tree
  • Binary Tree Right Side View
  • Subset of Another Tree 🚩
  • Construct Binary Tree from Preorder and Inorder Traversal 🚩
  • Serialize and Deserialize Binary Tree 🚩
  • Validate Binary Search Tree 🚩
  • Kth Smallest Element in a BST
Graph
  • Number of Islands
  • Flood Fill
  • 01 Matrix
  • Rotting Oranges
  • Minimum Knight Moves ⭐
  • Clone Graph
  • Pacific Atlantic Water Flow 🚩
  • Number of Connected Components in an Undirected Graph ⭐
  • Graph Valid Tree ⭐
  • Course Schedule
  • Alien Dictionary ⭐
Heap
  • Merge K Sorted Lists
  • K Closest Points to Origin
  • Top K Frequent Elements
  • Find Median from Data Stream 🚩
Trie
  • Implement Trie (Prefix Trie)
  • Add and Search Word
  • Word Break 🚩
  • Word Search 2 🚩

Week 4

Interval
  • Merge Intervals
  • Insert Intervals
  • Non-overlapping Intervals
  • Meeting Rooms ⭐
  • Meeting Rooms 2 ⭐
Dynamic Programming

For more questions on Dynamic Programming, refer to the #dynamic-programming-roadmap after you are done with this initial study plan

  • Climbing Stairs
  • Coin Change
  • House Robber
  • Longest Increasing Subsequence
  • 0/1 Knapsack or Partition Equal Subset Sum
  • Longest Common Subsequence
  • Word Break
  • Combination Sum
  • House Robber 2
  • Decode Ways
  • Unique Paths
  • Jump Game
Binary
  • Sum of Two Integers
  • Number of 1 bits
  • Counting Bits
  • Missing Number
  • Reverse Bits
  • Single Number
Math
  • Pow(x, n)
  • Sqrt(x)
  • Integer to English Words
Geometry
  • Rectangle Overlap
  • K Closest Points to Origin
  • Rectangle Area

Week 5 onwards

Once you have completed the study plan, feel free to use other question banks like Grind75 and Neetcode to continue improving your familiarity and speed.

You will notice that many of the questions from this study plan overlaps with these question banks. I recommend leaving them to the end and redoing them when you've completed the other questions.

You may also want to try improving your dynamic programming skills with the dynamic programming roadmap below.

Dynamic programming roadmap

{% hint style="info" %} These questions were collated from this Reddit post {% endhint %}

I have written up a problems guide for this roadmap as I personally think that developing the intuition for dynamic programming is not easy and I would like to help bridge the gap. The problems guide can be found here.

Warmup
  • Climbing Stairs
  • Nth Tribonacci Number
  • Perfect Squares
Linear Sequences

These are problems that require solving sub-problems based on the prefix of the array with a constant transition

  • Minimum Cost to Climb Stairs
  • Minimum Time to Make Rope Colorful 🚩
  • House Robber
  • Decode Ways
  • Minimum Cost for Tickets 🚩
  • Solving Questions with Brainpower
Grids

These are problems where the dynamic programming array is the same dimensions as the grid

  • Unique Paths
  • Unique Paths 2 🚩
  • Minimum Path Sum
  • Count Square Submatrices with All Ones 🚩
  • Maximal Square
  • Dungeon Game 🚩
Two Sequences

These problems often require $$O(MN)$$, where $$dp[i][j]$$ solves for $$arr1[:i]$$ and $$arr2[:j]$$

  • Longest Common Subsequence
  • Uncrossed Lines
  • Minimum ASCII Delete Sum for Two Strings
  • Edit Distance
  • Distinct Subsequences
  • Shortest Common Supersequence
Intervals

These problems often require solving for every interval of the array

  • Longest Palindromic Subsequnce
  • Strong Game 7 🚩
  • Palindromic Substrings
  • Minimum Cost Tree from Leaf Values
  • Strange Pointer
  • Burst Balloons
Linear Sequence Transitions

These problems are often solved on every prefix of the array, transition from every $$j < i$$

  • Count Number of Teams
  • Longest Increasing Subsequence
  • Partition Array for Maximum Sum
  • Largest Sum of Averages
  • Filling Bookcase Shelves
Knapsack-like
  • Partition Equal Subset Sum
  • Number of Dice Rolls with Target Sum
  • Combination Sum 4
  • Ones and Zeros
  • Coin Change
  • Coin Change 2
  • Target Sum
  • Last Stone Weight 2
  • Profitable Schemes
Topological Sort/Graphs

These problems often require solving on all sub-graphs connected to each node

  • Longest String Chain
  • Longest Increasing Path in a Matrix
  • Course Schedule 3
Trees

These problems often require solving on all subtrees

  • House Robbers 3 🚩
  • Binary Tree Cameras
Interesting Problems

Other interesting problems that I have done so far

  • String Compression 2 🚩
  • Minimum Difficulty of a Job Schedule 🚩