18-Week Deep Dive FAANG Interview Prep Plan
Week 1: Foundations and Problem-Solving Intuition
- Python essentials for coding interviews (1 day)
- Time and space complexity analysis (1 day)
- Problem-solving strategies and intuition building (2 days)
- Breaking down problems
- Pattern recognition
- Approaching problems from multiple angles
- Introduction to game theory in algorithms (1 day)
- Practice: Solve 20 easy LeetCode problems (2 days)
Week 2-4: Linked Lists (Deep Dive)
- Linked list fundamentals and implementation (1 day)
- Two-pointer techniques in linked lists (2 days)
- Reversing linked lists (variations and applications) (2 days)
- Detecting and removing cycles (2 days)
- Intersection and merging of linked lists (1 day)
- Deep copy of linked lists with random pointers (1 day)
- LRU Cache implementation using linked lists (1 day)
- Sorting linked lists (merge sort, quick sort on linked lists) (2 days)
- Multi-level linked lists and flattening techniques (1 day)
- XOR Linked Lists (1 day)
- Practice: Solve 50 medium/hard LeetCode problems on linked lists (7 days)
Week 5-8: Trees (Deep Dive)
- Binary tree traversals (pre, in, post, level order) and variations (2 days)
- Morris traversal for constant space (1 day)
- Binary Search Trees (BST) operations and balancing (2 days)
- AVL trees and Red-Black trees implementation (3 days)
- Segment trees and lazy propagation (2 days)
- Fenwick trees / Binary Indexed Trees (2 days)
- Trie and its variations (compressed trie, suffix trie) (2 days)
- N-ary trees and forest of trees problems (1 day)
- Lowest Common Ancestor (LCA) and variations (1 day)
- Serialization and deserialization of binary trees (1 day)
- Tree isomorphism and tree encoding problems (1 day)
- Threaded binary trees (1 day)
- Game theory on trees (Nim game, Sprague-Grundy theorem) (1 day)
- Practice: Solve 70 medium/hard LeetCode problems on trees (11 days)
Week 9-12: Graphs (Deep Dive)
- Graph representations and basic algorithms (1 day)
- Depth-First Search (DFS) and applications (2 days)
- Breadth-First Search (BFS) and applications (2 days)
- Shortest path algorithms (Dijkstra's, Bellman-Ford, Floyd-Warshall) (3 days)
- Minimum spanning tree algorithms (Kruskal's, Prim's) (2 days)
- Topological sorting and cycle detection (2 days)
- Strongly Connected Components (Kosaraju's and Tarjan's algorithms) (2 days)
- Articulation points and bridges (1 day)
- Network flow (Ford-Fulkerson, Edmonds-Karp, Dinic's algorithms) (3 days)
- Bipartite graphs and matching problems (2 days)
- Graph coloring problems (1 day)
- Hamiltonian and Eulerian paths (1 day)
- Game theory on graphs (2 days)
- Nim game on graphs
- Green Hackenbush
- Threshold games on graphs
- Practice: Solve 80 medium/hard LeetCode problems on graphs (12 days)
Week 13-16: Dynamic Programming (Deep Dive)
- DP fundamentals and problem-solving approach (1 day)
- 1D DP problems and variations (2 days)
- 2D DP problems and grid-based DP (2 days)
- String DP problems (edit distance, longest common subsequence, etc.) (2 days)
- Knapsack problems and variations (2 days)
- DP on trees and graphs (2 days)
- Bitmask DP (2 days)
- Digit DP (1 day)
- Probability DP (1 day)
- DP with game theory (Minimax algorithm, Alpha-beta pruning) (2 days)
- State compression DP (1 day)
- Convex hull optimization for DP (1 day)
- Practice: Solve 80 medium/hard LeetCode problems on DP (13 days)
Week 17: Other Essential Topics (Condensed)
- Arrays and strings (sliding window, two-pointer techniques) (1 day)
- Sorting and searching algorithms (1 day)
- Heap and priority queue (1 day)
- Hash tables and their applications (1 day)
- Bit manipulation techniques (1 day)
- Practice: Solve 25 medium/hard problems mixing these topics (2 days)
Week 18: Low-Level Design and Final Preparation
- Object-Oriented Design principles (1 day)
- Common design patterns in interviews (1 day)
- Practice: Solve machine coding problems (2 days)
- Design a parking lot
- Implement a rate limiter
- Design a food ordering system
- Mock interviews and time-constrained practice (2 days)
- Final revision of key algorithms and data structures (1 day)
Daily Routine:
- Study theory and concepts (2 hours)
- Implement algorithms and data structures from scratch (2 hours)
- Solve LeetCode problems:
- Week 1: 5-6 Easy problems
- Weeks 2-18: 5-6 Medium/Hard problems
- Review and optimize solutions (1 hour)
- Revisit previously solved problems (1 hour)