This repository is a collection of coding problems that I have solved to prepare for technical (SWE) interviews. Questions are completed in Java.
Topics (from Neetcode.io and Leetcode): Arrays & Hashing, Two Pointers, Sliding Window, Stack, Binary Search, Linked List, Trees, Tries, Heap/Priority Queue, Backtracking, Graphs, 1-D Dynamic Programming (DP), 2-D Dynamic Programming (DP), Greedy, Intervals, Math & Geometry, Bit Manipulation, Matrix, Sorting, and Prefix Sum.
| # | Name | Difficulty | Solution | Time | Topic |
|---|---|---|---|---|---|
| 1 | Two Sum | Easy | Java | 10 mins | |
| 1(A2) | Two Sum | Easy | Java | 11 mins | Arrays & Hashing |
| 1(A3) | Two Sum | Easy | Java | -- | Arrays & Hashing |
| 1(A4) | Two Sum | Easy | Java | DNF | Arrays & Hashing |
| 2 | Add Two Numbers | Medium | Java | 33 mins | |
| 2(A2) | Add Two Numbers | Medium | Java | 45 mins | Linked List |
| 3 | Longest Substring Without Repeating Characters | Medium | Java | 47 mins | |
| 3(A2) | Longest Substring Without Repeating Characters | Medium | Java | 30 mins, one hint | Sliding Window |
| 5 | Longest Palindromic Substring | Medium | Java | 73 mins | 1-D DP |
| 7 | Reverse Integer | Medium | Java | 11 mins | Bit Manipulation |
| 9 | Palindrome Number | Easy | Java | 4 mins | |
| 11 | Container With Most Water | Medium | Java | 50 mins | |
| 11 (A2) | Container With Most Water | Medium | Java | N/A | |
| 12 | Integer to Roman | Medium | Java | 40 mins | Math & Geometry |
| 13 | Roman to Integer | Easy | Java | 18 mins | |
| 13 (A2) | Roman to Integer | Easy | Java | 12 mins | Math & Geometry |
| 14 | Longest Common Prefix | Easy | Java | DNF | |
| 15 | 3Sum | Medium | Java | DNF | |
| 17 | Letter Combinations of a Phone Number | Medium | Java | 26 mins | Backtracking |
| 19 | Remove Nth Node From End of List | Medium | Java | 24 mins | |
| 20 | Valid Parentheses | Easy | Java | 19 mins | |
| 21 | Merge Two Sorted Lists | Easy | Java | DNF | |
| 22 | Generate Parentheses | Medium | Java | 40 mins | |
| 22(A2) | Generate Parentheses | Medium | Java | 17 mins | Backtracking |
| 23 | Merge k Sorted Lists | Hard | Java | 46 mins | Linked List |
| 26 | Remove Duplicates from Sorted Array | Easy | Java | 10 mins | Arrays & Hashing |
| 31 | Next Permutation | Medium | Java | DNF | Two Pointer |
| 33 | Search in Rotated Sorted Array | Medium | Java | DNF | |
| 35 | Search Insert Position | Easy | Java | 6 min | |
| 36 | Valid Sudoku | Medium | Java | 37 min | Arrays & Hashing |
| 39 | Combination Sum | Medium | Java | DNF | |
| 40 | Combination Sum II | Medium | Java | DNF | |
| 40 (A2) | Combination Sum II | Medium | Java | DNF | Backtracking |
| 46 | Permutations | Medium | Java | 15 mins | |
| 48 | Rotate Image | Medium | Java | 1h 17mins, one hint | Matrix, Math & Geometry |
| 49 | Group Anagrams | Medium | Java | 31 mins | Arrays & Hashing |
| 49(A2) | Group Anagrams | Medium | Java | 16 mins | Arrays & Hashing |
| 49(A3) | Group Anagrams | Medium | Java | 18 mins | Arrays & Hashing |
| 50 -- DP w Memo | Pow(x, n) | Medium | Java | DNF | Math & Geometry |
| 50 -- Binary Exponentiation | Pow(x, n) | Medium | Java | -- | Math & Geometry |
| 54 | Spiral Matrix | Medium | Java | 44 mins | |
| 55 | Jump Game | Medium | Java | DNF | Greedy |
| 56 | Merge Intervals | Medium | Java | 28 mins | Intervals |
| 61 | Rotate List | Medium | Java | 24 mins | Linked List |
| 66 | Plus One | Easy | Java | 10 mins | |
| 70 | Climbing Stairs | Easy | Java | DNF | |
| 70(A2) | Climbing Stairs | Easy | Java | DNF | 1-D DP |
| 71 | Simplify Path | Medium | Java | 21 mins | Stack |
| 72 | Edit Distance | Medium | Java | DNF | 2-D DP |
| 73 | Set Matrix Zeroes | Medium | Java | 20 mins | Matrix, Math & Geometry |
| 74 | Search a 2D Matrix | Medium | Java | DNF | Binary Search |
| 76 | Minimum Window Substring | Hard | Java | 120 mins | Sliding Window |
| 78 | Subsets | Medium | Java | DNF | |
| 79 | Word Search | Medium | Java | DNF | |
| 79(A2) | Word Search | Medium | Java | 1h 20mins | Backtracking |
| 88 | Merge Sorted Array | Easy | Java | 9 mins | |
| 88(A2) | Merge Sorted Array | Easy | Java | DNF | Two-pointer |
| 90 | Subsets II | Medium | Java | 30 mins, hint | |
| 91 | Decode Ways | Medium | Java | DNF | 1-D DP |
| 94 | Binary Tree Inorder Traversal | Easy | Java | 6 minutes | Trees |
| 97 | Interleaving String | Medium | Java | DNF | 2-D DP |
| 98 | Validate Binary Search Tree | Medium | Java | DNF | Trees |
| 98(A2) | Validate Binary Search Tree | Medium | Java | 18 mins | Trees |
| 100 | Same Tree | Easy | Java | 26 mins | |
| 101 | Symmetric Tree | Easy | Java | 16 mins | |
| 102 | Binary Tree Level Order Traversal | Medium | Java | 37 mins | Trees |
| 104 | Maximum Depth of Binary Tree | Easy | Java | 8 mins | |
| 105 | Construct Binary Tree from Preorder and Inorder Traversal | Medium | Java | DNF | Trees |
| 121 | Best Time to Buy and Sell Stock | Easy | Java | DNF | |
| 121(A2) | Best Time to Buy and Sell Stock | Easy | Java | DNF | Sliding Window |
| 121(A3) | Best Time to Buy and Sell Stock | Easy | Java | 15 mins | Sliding Window |
| 125 | Valid Palindrome | Easy | Java | 34 mins | Two Pointers |
| 125 | Valid Palindrome | Easy | Java | 21 mins | Two Pointers |
| 128 | Longest Consecutive Sequence | Medium | Java | DNF | Arrays & Hashing |
| 129 | Sum Root to Leaf Numbers | Medium | Java | 15 mins | Trees |
| 131 | Palindrome Partitioning | Medium | Java | DNF | Backtracking |
| 133 | Clone Graph | Medium | Java | DNF | Graphs |
| 134 | Gas Station | Medium | Java | DNF | |
| 138 | Copy List with Random Pointer | Medium | Java | 38 Mins, one hint | |
| 139 | Word Break | Medium | Java | DNF | 1-D DP |
| 141 | Linked List Cycle | Easy | Java | 10 mins | Linked List |
| 143 | Reorder List | Medium | Java | DNF | Linked List |
| 146 | LRU Cache | Medium | Java | DNF | Linked List |
| 150 | Evaluate Reverse Polish Notation | Medium | Java | 16 mins | |
| 152 | Maximum Product Subarray | Medium | Java | DNF | 1-D DP |
| 153 | Find Minimum in Rotated Sorted Array | Medium | Java | DNF | Binary Search |
| 155 | Min Stack | Medium | Java | 31 mins, one hint | |
| 162 | Find Peak Element | Medium | Java | DNF | Binary Search |
| 169 | Majority Element | Easy | Java | 9 mins | |
| 198 | House Robber | Medium | Java | DNF | |
| 198(A2) | House Robber | Medium | Java | 16 minutes | 1-D DP |
| 200 | Number of Islands | Medium | Java | 21 mins | Graphs |
| 200(A2) | Number of Islands | Medium | Java | 9 mins | Graphs |
| 200(A3) | Number of Islands | Medium | Java | 21 mins | Graphs |
| 202 | Happy Number | Easy | Java | 5 mins | Math and Geometry |
| 206 | Reverse Linked List | Easy | Java | DNF | |
| 206(A2) | Reverse Linked List | Easy | Java | 30 mins | Linked List |
| 207 | Course Schedule | Medium | Java | DNF | Graphs |
| 213 | House Robber II | Medium | Java | DNF | 1-D DP |
| 215 -- Heap | Kth Largest Element in an Array | Medium | Java | DNF | Heap/Priority Queue |
| 215(A2) -- QuickSelect | Kth Largest Element in an Array | Medium | Java | -- | Heap/Priority Queue |
| 217 | Contains Duplicate | Easy | Java | 4 min | |
| 226 | Invert Binary Tree | Easy | Java | 10 mins | |
| 227 | Basic Calculator II | Medium | Java | DNF | Stack |
| 227(A2) | Basic Calculator II | Medium | Java | DNF | Stack |
| 230 | Kth Smallest Element in a BST | Medium | Java | 60 mins | Trees |
| 232 | Implement Queue using Stacks | Easy | Java | DNF | Stack |
| 235 | Lowest Common Ancestor of a Binary Search Tree | Medium | Java | 38 mins | |
| 236 | Lowest Common Ancestor of a Binary Tree | Medium | Java | DNF | Trees |
| 238 | Product of Array Except Self | Medium | Java | DNF | Arrays & Hashing |
| 242 | Valid Anagram | Easy | Java | 13 mins | |
| 242(A2) | Valid Anagram | Easy | Java | ||
| 252 | Meeting Rooms I | Easy | Java | 10 mins | Intervals |
| 253 | Meeting Rooms II | Medium | Java | DNF | Intervals, Two Pointers |
| 261 | Graph Valid Tree | Medium | Java | DNF | Graphs |
| 268 | Missing Number | Easy | Java | 5 mins | |
| 269 | Alien Dictionary | Hard | Java | DNF | Graphs |
| 283 | Move Zeroes | Easy | Java | 14 mins | Two Pointers |
| 297 | Serialize and Deserialize Binary Tree | Hard | Java | DNF | Trees |
| 300 | Longest Increasing Subsequence | Medium | Java | DNF | 1-D DP |
| 300 (A2) | Longest Increasing Subsequence | Medium | Java | DNF | 1-D DP |
| 300 (A3) | Longest Increasing Subsequence | Medium | Java | 35 mins, one hint | 1-D DP |
| 309 | Best Time to Buy and Sell Stock with Cooldown | Medium | Java | DNF | 2-D DP |
| 314 | Binary Tree Vertical Order Traversal | Medium | Java | 34 mins | Trees |
| 322 | Coin Change | Medium | Java | DNF | 1-D DP |
| 323 | Number of Connected Components in an Undirected Graph | Medium | Java | DNF | Graphs |
| 337 | House Robber III | Medium | Java | 60 mins, one hint | 1-D DP |
| 338 | Counting Bits | Easy | Java | 13 mins | 1-D DP, Bit Manipulation |
| 339 | Nested List Weight Sum | Medium | Java | 15 mins | BFS, DFS |
| 347 | Top K Frequent Elements | Medium | Java | DNF | |
| 347(A2) -- Heap | Top K Frequent Elements | Medium | Java | 27 mins | Heap/Priority Queue |
| 347(A2) -- QuickSelect | Top K Frequent Elements | Medium | Java | -- | Heap/Priority Queue |
| 371 | Sum of Two Integers | Medium | Java | DNF | Bit Manipulation |
| 380 | Insert Delete GetRandom O(1) | Medium | Java | DNF | Arrays & Hashing |
| 408 | Valid Word Abbreviation | Easy | Java | 21 mins | Two Pointers , String Manipulation |
| 424 | Longest Repeating Character Replacement | Medium | Java | DNF | Sliding Window |
| 426 | Convert Binary Search Tree to Sorted Doubly Linked List | Medium | Java | DNF | Trees |
| 435 | Non-overlapping Intervals | Medium | Java | DNF | Greedy, Intervals |
| 498 | Diagonal Traverse | Medium | Java | DNF | Matrix |
| 509 | Fibonacci Number | Easy | Java | 2 mins | DP |
| 528 | Random Pick with Weight | Medium | Java | DNF | Binary Search, Prefix Sum |
| 543 | Diameter of Binary Tree | Easy | Java | DNF | |
| 543(A2) | Diameter of Binary Tree | Easy | Java | 25 mins, one hint | Trees |
| 560 | Subarray Sum Equals K | Medium | Java | DNF | Prefix Sum |
| 572 | Subtree of Another Tree | Easy | Java | 34 mins | |
| 628 | Maximum Product of Three Numbers | Easy | Java | 7 mins | Arrays & Hashing |
| 670 | Maximum Swap | Medium | Java | DNF | Math & Geometry |
| 680 | Valid Palindrome II | Easy | Java | 20 mins | Two Pointers |
| 704 | Binary Search | Easy | Java | 27 mins | Binary Search |
| 746 | Min Cost Climbing Stairs | Easy | Java | 19 mins | 1-D DP |
| 791 | Custom Sort String | Medium | Java | 22 mins | Arrays & Hashing |
| 791(A2) | Custom Sort String | Medium | Java | -- | Arrays & Hashing |
| 853 | Car Fleet | Medium | Java | DNF | Stack |
| 875 | Koko Eating Bananas | Medium | Java | DNF | Binary search |
| 938 | Range Sum of BST | Easy | Java | 18 mins | Trees |
| 938(A2) | Range Sum of BST | Easy | Java | -- | Trees |
| 994 | Rotting Oranges | Medium | Java | -- | Graphs (BFS) |
| 1004 | Max Consecutive Ones III | Medium | Java | DNF | Sliding Window |
| 1091 | Shortest Path in Binary Matrix | Medium | Java | DNF | Matrix |
| 1143 | Longest Common Subsequence | Medium | Java | DNF | 2-D DP |
| 1249 | Minimum Remove to Make Valid Parentheses | Medium | Java | 40 mins | String Manipulation, Stack |
| 1405 | Longest Happy String | Medium | Java | DNF | Greedy |
| 1448 | Count Good Nodes in Binary Tree | Medium | Java | 12 mins | |
| 1570 -- HashMap | Dot Product of Two Sparse Vectors | Medium | Java | 13 mins | Arrays & Hashing, Two Pointers |
| 1570(A2) -- Tuple | Dot Product of Two Sparse Vectors | Medium | Java | -- | Arrays & Hashing, Two Pointers |
| 1644 | Lowest Common Ancestor of a Binary Tree II | Medium | Java | 19 mins | Trees |
| 1650 | Lowest Common Ancestor of a Binary Tree III | Medium | Java | 14 mins | Trees |
| 1650(A2) | Lowest Common Ancestor of a Binary Tree III | Medium | Java | -- | Trees |
| 1762 | Buildings With an Ocean View | Medium | Java | 15 mins | -- |
| 1909 | Remove One Element to Make the Array Strictly Increasing | Easy | Java | DNF | Arrays & Hashing |
| 2043 | Simple Bank System | Medium | Java | 20 mins | Misc. (not DS&A) |
| Section | Number | Name | Difficulty | Solution | Time | Topic |
|---|---|---|---|---|---|---|
| Intro | 9 | MatrixElementSum | Easy | Java | 10 mins | Matrix |
Cracking the Coding Interview 6th Edition
| # | Name | Solution | Time |
|---|---|---|---|
| 0.1 | Big-O Example 1 | Java | |
| 0.2 | Big-O Example 2 | Java | |
| 0.3 | Big-O Example 3 | Java | |
| 0.4 | Big-O Example 4 | Java | |
| 0.5 | Big-O Example 5 | Java | |
| 0.6 | Big-O Example 6 | Java | |
| 0.9 | Big-O Example 9 | Java | |
| 0.10 | Big-O Example 10 | Java | |
| 0.11 | Big-O Example 11 | Java | |
| 0.12 | Big-O Example 12 | Java | |
| 0.13 | Big-O Example 13 | Java | |
| 0.14 | Big-O Example 14 | Java | |
| 0.15 | Big-O Example 15 | Java | |
| 0.16 | Big-O Example 16 | Java | |
| 0.1AP | Big-O Additional Problem 1 | Java | |
| 0.2AP | Big-O Additional Problem 2 | Java | |
| 0.3AP | Big-O Additional Problem 3 | Java | |
| 0.4AP | Big-O Additional Problem 4 | Java | |
| 0.5AP | Big-O Additional Problem 5 | Java | |
| 0.6AP | Big-O Additional Problem 6 | Java | |
| 0.9AP | Big-O Additional Problem 9 | Java | |
| 0.10AP | Big-O Additional Problem 10 | Java | |
| 0.11AP | Big-O Additional Problem 11 | Java | |
| 0.12AP | Big-O Additional Problem 12 | Java | |
| 1.1 | Is Unique | Java | |
| 1.1 (A2) | Is Unique | Java | 16 mins |
| 1.2 | Check Permutation | Java | 35 mins |
| 1.2 (A2) | Check Permutation | Java | 18 mins |
| 1.3 | URLify | Java | DNF |
| 1.3 (A2) | URLify | Java | 33 mins |
| 1.4 | Palindrome Permutation | Java | 87 mins, one hint |
| 1.4 (A2) | Palindrome Permutation | Java | 50 mins |
| 1.5 | One Away | Java | 35 mins |
| 1.5 (A2) | One Away | Java | 18 mins |
| 1.6 | String Compression | Java | 17 mins |
| 1.7 | Rotate Matrix | Java | DNF |
| 1.8 | Zero Matrix | Java | 35 mins |
| 1.9 | String Rotation | Java | 25 mins, one hint |
Misc. questions that I've done
| Name | Difficulty | Solution | Time | Topic |
|---|---|---|---|---|
| Wordle | Java | 20 mins | Arrays & Hashing | |
| Cat Sweater Robber | Java | 9 mins | Binary Search | |
| Recommended Friend | Medium | Java | -- | Graphs |
| Conistent Logs | Hard | Java | -- | Sliding Window, Arrays & Hashing |