- R.I.P. to my old Leetcode repository, where there were
5.7k+
stars and2.2k+
forks (ever the top 3 in the field). - Since free questions may be even mistakenly taken down by some companies, only solutions will be post on now.
- There are new LeetCode questions every week. I'll keep updating for full summary and better solutions.
- For more problem solutions, you can see my LintCode, GoogleKickStart repositories.
- For more challenging problem solutions, you can also see my GoogleCodeJam, FacebookHackerCup repositories.
- Hope you enjoy the journey of learning data structures and algorithms.
- Notes: "π" means your subscription of LeetCode premium membership is required for reading the question.
- Bit Manipulation
- Array
- String
- Linked List
- Stack
- Queue
- Binary Heap
- Tree
- Hash Table
- Math
- Sort
- Two Pointers
- Recursion
- Binary Search
- Binary Search Tree
- Breadth-First Search
- Depth-First Search
- Backtracking
- Dynamic Programming
- Greedy
- Graph
- Geometry
- Simulation
- Design
- Concurrency
- C++
- Python
- Algorithms
- Math
- Visualization
- Handy Table
- Thinking Techniques as follows:
n | Complexity | Possible Algorithms & Techniques |
---|---|---|
1018+ | O(1) | Math |
1018 | O(logn) | Binary & Ternary Search / Matrix Power / Cycle Tricks / Big Simulation Steps / Values Reranking / Math |
1016 | O(n1/2) | Math |
108 | O(n) | Greedy / Ad-hoc / DP |
4Γ107 | O(nlogn) | Linear # Calls to Binary & Ternary Search / Pre-processing & Querying / Divide and Conquer |
104 | O(n2) | Ad-hoc / DP / Greedy / Divide and Conquer / Branch and Bound |
500 | O(n3) | Ad-hoc / DP / Greedy / Divide and Conquer / Branch and Bound |
90 | O(n4) | Ad-hoc / DP / Greedy / Divide and Conquer / Branch and Bound |
50 | O(n5) | Branch and Bound |
40 | O(nx2n/2) | Meet in the Middle |
20 | O(nΓ2n) | Backtracking / Generating 2n Subsets / Bitmask Technique |
11 | O(n!) | Factorial / Permutation / Combination Algorithm |
# | Title | Solution | Time | Space | Difficulty | Tag | Note |
---|---|---|---|---|---|---|---|
1310 | XOR Queries of a Subarray | C++ Python | O(n) | O(1) | Medium | ||
1318 | Minimum Flips to Make a OR b Equal to c | C++ Python | O(1) | O(1) | Medium | ||
1342 | Number of Steps to Reduce a Number to Zero | C++ Python | O(logn) | O(1) | Easy | ||
1558 | Minimum Numbers of Function Calls to Make Target Array | C++ Python | O(nlogn) | O(1) | Medium | Greedy | |
1707 | Maximum XOR With an Element From Array | C++ Python | O(nlogn + mlogm + nlogk + mlogk) | O(nlogk) | Hard | variant of Maximum XOR of Two Numbers in an Array | Greedy, Trie |
1720 | Decode XORed Array | C++ Python | O(n) | O(1) | Easy | ||
1734 | Decode XORed Permutation | C++ Python | O(n) | O(1) | Medium | ||
1829 | Maximum XOR for Each Query | C++ Python | O(n) | O(1) | Medium | ||
2151 | Maximum Good People Based on Statements | C++ Python | O(n^2 * 2^n) | O(1) | Hard | Bitmask, Brute Force |
# | Title | Solution | Time | Space | Difficulty | Tag | Note |
---|---|---|---|---|---|---|---|
1424 | Diagonal Traverse II | C++ Python | O(m * n) | O(m) | Medium | ||
1438 | Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit | C++ Python | O(n) | O(n) | Hard | Mono Deque | |
1499 | Max Value of Equation | C++ Python | O(n) | O(n) | Hard | Mono Deque | |
1696 | Jump Game VI | C++ Python | O(n) | O(k) | Medium | Mono Deque, Sliding Window |
# | Title | Solution | Time | Space | Difficulty | Tag | Note |
---|---|---|---|---|---|---|---|
1106 | Parsing A Boolean Expression | C++ Python | O(n) | O(n) | Hard |
# | Title | Solution | Time | Space | Difficulty | Tag | Note |
---|---|---|---|---|---|---|---|
1373 | Maximum Sum BST in Binary Tree | C++ Python | O(n) | O(h) | Hard | DFS, Stack | |
1382 | Balance a Binary Search Tree | C++ Python | O(n) | O(h) | Medium | DFS, Stack | |
1902 | Depth of BST Given Insertion Order | C++ Python | O(nlogn) | O(n) | Medium | π | Sorted Dict |
1932 | Merge BSTs to Create Single BST | C++ Python | O(n) | O(n) | Hard | BST, BFS |
# | Title | Solution | Time | Space | Difficulty | Tag | Note |
---|---|---|---|---|---|---|---|
1034 | Coloring A Border | C++ Python | O(m * n) | O(m + n) | Medium | ||
1036 | Escape a Large Maze | C++ Python | O(n^2) | O(n) | Hard | ||
1091 | Shortest Path in Binary Matrix | C++ Python | O(n^2) | O(n) | Medium | ||
1102 | Path With Maximum Minimum Value | C++ Python | O((m * n) * log(m * n)) | O(m * n) | Medium | π | Binary Search, DFS, Dijkstra's Algorithm |
1129 | Shortest Path with Alternating Colors | C++ Python | O(n + e) | O(n + e) | Medium | ||
1136 | Parallel Courses | C++ Python | O(|V| + |E|) | O(|E|) | Hard | π | Topological Sort |
1161 | Maximum Level Sum of a Binary Tree | C++ Python | O(n) | O(w) | Medium | DFS | |
1162 | As Far from Land as Possible | C++ Python | O(m * n) | O(m * n) | Medium | ||
1203 | Sort Items by Groups Respecting Dependencies | C++ Python | O(n + e) | O(n + e) | Hard | Topological Sort | |
1210 | Minimum Moves to Reach Target with Rotations | C++ Python | O(n) | O(n) | Hard | ||
1215 | Stepping Numbers | C++ Python | O(logk + r) | O(k) | Medium | π | Precompute, Binary Search |
1245 | Tree Diameter | C++ Python | O(|V| + |E|) | O(|E|) | Medium | ||
1263 | Minimum Moves to Move a Box to Their Target Location | C++ Python | O(m^2 * n^2) | O(m^2 * n^2) | Hard | A* Search Algorithm |
|
1284 | Minimum Number of Flips to Convert Binary Matrix to Zero Matrix | C++ Python | O((m * n) * 2^(m * n)) | O((m * n) * 2^(m * n)) | Hard | ||
1291 | Sequential Digits | C++ Python | O(1) | O(1) | Medium | ||
1293 | Shortest Path in a Grid with Obstacles Elimination | C++ Python | O(m * n * k) | O(m * n) | Hard | A* Search Algorithm |
|
1298 | Maximum Candies You Can Get from Boxes | C++ Python | O(n^2) | O(n) | Hard | ||
1302 | Deepest Leaves Sum | C++ Python | O(n) | O(w) | Medium | ||
1306 | Jump Game III | C++ Python | O(n) | O(n) | Medium | ||
1311 | Get Watched Videos by Your Friends | C++ Python | O(n + vlogv) | O(w) | Medium | ||
1345 | Jump Game IV | C++ Python | O(n) | O(n) | Hard | ||
1368 | Minimum Cost to Make at Least One Valid Path in a Grid | C++ Python | O(m * n) | O(m * n) | Hard | A* Search Algorithm , 0-1 BFS, Deque |
|
1514 | Path with Maximum Probability | C++ Python | O(|E| * log|V|) | O(|E|) | Medium | Dijkstra's Algorithm |
|
1602 | Find Nearest Right Node in Binary Tree | C++ Python | O(n) | O(w) | Medium | π | |
1609 | Even Odd Tree | C++ Python | O(n) | O(w) | Medium | ||
1625 | Lexicographically Smallest String After Applying Operations | C++ Python | O(n^2) | O(1) | Medium | BFS, String | |
1654 | Minimum Jumps to Reach Home | C++ Python | O(max(x, max(forbidden)) + a + b) | O(max(x, max(forbidden)) + a + b) | Medium | BFS | |
1660 | Correct a Binary Tree | C++ Python | O(n) | O(w) | Medium | π | BFS |
1728 | Cat and Mouse II | C++ Python | O((m * n)^2 * (m + n)) | O((m * n)^2) | Hard | variant of Cat and Mouse | MiniMax, Topological Sort |
1730 | Shortest Path to Get Food | C++ Python | O(m * n) | O(m + n) | Medium | π | BFS |
1765 | Map of Highest Peak | C++ Python | O(m * n) | O(m * n) | Medium | BFS | |
1926 | Nearest Exit from Entrance in Maze | C++ Python | O(m * n) | O(m + n) | Medium | Bi-BFS | |
1928 | Minimum Cost to Reach Destination in Time | C++ Python | O(|E| * log|V|) | O(|E|) | Hard | variant of Cheapest Flights Within K Stops | Dijkstra's Algorithm |
2039 | The Time When the Network Becomes Idle | C++ Python | O(|E|) | O(|E|) | Medium | Math | |
2045 | Second Minimum Time to Reach Destination | C++ Python | O(|E|) | O(|E|) | Hard | Bi-BFS | |
2050 | Parallel Courses III | C++ Python | O(|V| + |E|) | O(|E|) | Hard | variant of Parallel Courses | Topological Sort |
2059 | Minimum Operations to Convert Number | C++ Python | O(m * n) | O(m) | Medium | ||
2115 | Find All Possible Recipes from Given Supplies | C++ Python | O(|E|) | O(|E|) | Medium | Topological Sort | |
2146 | K Highest Ranked Items Within a Price Range | C++ Python | O(m * n + klogk) | O(m * n) | Medium | BFS, Quick Select, Sort |
# | Title | Solution | Time | Space | Difficulty | Tag | Note |
---|---|---|---|---|---|---|---|
1042 | Flower Planting With No Adjacent | C++ Python | O(n) | O(n) | Easy | ||
1101 | The Earliest Moment When Everyone Become Friends | C++ Python | O(nlogn) | O(n) | Medium | π | Union Find |
1135 | Connecting Cities With Minimum Cost | C++ Python | O(nlogn) | O(n) | Medium | π | Union Find, Kruskal's Algorithm , MST |
1168 | Optimize Water Distribution in a Village | C++ Python | O(nlogn) | O(n) | Hard | π | Union Find |
1334 | Find the City With the Smallest Number of Neighbors at a Threshold Distance | C++ Python | O(n^3) | O(n^2) | Medium | Floyd-Warshall Algorithm |
|
1349 | Maximum Students Taking Exam | C++ Python | O(m * n * sqrt(m * n)) | O(m + n) | Hard | GCJ2008 - Round 3 | Hopcroft-Karp Bipartite Matching , Hungarian Bipartite Matching , Maximum Independent Set |
1361 | Validate Binary Tree Nodes | C++ Python | O(n) | O(n) | Medium | DFS, Tree | |
1462 | Course Schedule IV | C++ Python | O(n^3) | O(n^2) | Medium | Floyd-Warshall Algorithm |
|
1489 | Find Critical and Pseudo-Critical Edges in Minimum Spanning Tree | C++ Python | O(nlogn) | O(n) | Hard | Kruskal Algorithm |
|
1557 | Minimum Number of Vertices to Reach All Nodes | C++ Python | O(e) | O(n) | Medium | ||
1579 | Remove Max Number of Edges to Keep Graph Fully Traversable | C++ Python | O(n + m) | O(n) | Hard | Union Find | |
1584 | Min Cost to Connect All Points | C++ Python | O(n^2) | O(n) | Medium | Union Find, Kruskal's Algorithm , MST |
|
1601 | Maximum Number of Achievable Transfer Requests | C++ Python | O((n + r) * 2^r) | O(n + r) | Hard | Combinations, Backtracking | |
1615 | Maximal Network Rank | C++ Python | O(m + n + k^2) | O(m + n) | Medium | Counting Sort | |
1627 | Graph Connectivity With Threshold | C++ Python | O(nlogn + q) | O(n) | Hard | Union Find, Math | |
1631 | Path With Minimum Effort | C++ Python | O(m * n * log(m * n)) | O(m * n) | Medium | Binary Search, DFS, BFS, Bi-BFS, Union Find, Dijkstra's Algorithm |
|
1697 | Checking Existence of Edge Length Limited Paths | C++ Python | O(nlogn + mlogm) | O(n) | Hard | Union Find | |
1719 | Number Of Ways To Reconstruct A Tree | C++ Python | O(nlogn) | O(n) | Hard | ||
1724 | Checking Existence of Edge Length Limited Paths II | C++ Python | ctor: O(nlogn + mlogm) query: O(logn) |
O(nlogn + m) | Hard | π | Versioned Union Find, Binary Lifting |
1743 | Restore the Array From Adjacent Pairs | C++ Python | O(n) | O(n) | Medium | ||
1761 | Minimum Degree of a Connected Trio in a Graph | C++ Python | O(n^3) | O(n^2) | Hard | ||
1778 | Shortest Path in a Hidden Grid | C++ Python | O(m * n) | O(m * n) | Medium | π | DFS, BFS, Bi-BFS |
1782 | Count Pairs Of Nodes | C++ Python | O(n + e + q) | O(n + e) | Hard | Counting, Two Pointers | |
1786 | Number of Restricted Paths From First to Last Node | C++ Python | O(|E| * log|V|) | O(|E|) | Medium | Dijkstra's Algorithm , DP |
|
1791 | Find Center of Star Graph | C++ Python | O(n) | O(n) | Medium | ||
1810 | Minimum Path Cost in a Hidden Grid | C++ Python | O(m * n * log(m * n)) | O(m * n) | Medium | π | DFS, Dijkstra's Algorithm |
1820 | Maximum Number of Accepted Invitations | C++ Python | O(m * n * sqrt(m + n)) | O(m + n) | Medium | π | Hopcroft-Karp Bipartite Matching , Hungarian Bipartite Matching |
1879 | Minimum XOR Sum of Two Arrays | C++ Python | O(n^3) | O(n^2) | Hard | DP, Hungarian Weighted Bipartite Matching |
|
1947 | Maximum Compatibility Score Sum | C++ Python | O(m^2 * (n + m)) | O(m^2) | Medium | variant of Minimum XOR Sum of Two Arrays | DP, Hungarian Weighted Bipartite Matching |
1971 | Find if Path Exists in Graph | C++ Python | O(|V| + |E|) | O(|V| + |E|) | Easy | DFS, BFS, Bi-BFS | |
1976 | Number of Ways to Arrive at Destination | C++ Python | O(|E| * log|V|) | O(|E|) | Medium | Dijkstra's Algorithm |
|
2076 | Process Restricted Friend Requests | C++ Python | O(n * r) | O(n) | Hard | Union Find | |
2077 | Paths in Maze That Lead to Same Room | C++ Python | O(|V|^3) | O(|E|) | Medium | π | |
2092 | Find All People With Secret | C++ Python | O(nlogn) | O(nlogn) | Hard | BFS, DFS, Union Find | |
2093 | Minimum Path Cost in a Hidden Grid | C++ Python | O(|E| * log|V|) | O(|V| + |E|) | Medium | variant of Cheapest Flights Within K Stops, π | Dijkstra's Algorithm , DP |
2097 | Valid Arrangement of Pairs | C++ Python | O(|V| + |E|) | O(|V| + |E|) | Hard | variant of Reconstruct Itinerary | Hierholzer's Algorithm , Eulerian Path |
2123 | Minimum Operations to Remove Adjacent Ones in Matrix | C++ Python | O(m * n * sqrt(m * n)) | O(m + n) | Hard | variant of Maximum Students Taking Exam, π | Hopcroft-Karp Bipartite Matching , Maximum Independent Set |
2127 | Maximum Employees to Be Invited to a Meeting | C++ Python | O(n) | O(n) | Hard | ||
2172 | Maximum AND Sum of Array | C++ Python | O(n^3) | O(n^2) | Hard | variant of Maximum Compatibility Score Sum | DP, Hungarian Weighted Bipartite Matching |
# | Title | Solution | Time | Space | Difficulty | Tag | Note |
---|---|---|---|---|---|---|---|
1453 | Maximum Number of Darts Inside of a Circular Dartboard | C++ Python | O(n^2 * logn) | O(n) | Hard | Line Sweep | |
1515 | Best Position for a Service Centre | C++ Python | O(n * iter) | O(n) | Hard | Geometric Median, Gradient Descent, Weiszfeld's Algorithm | |
1610 | Maximum Number of Visible Points | C++ Python | O(nlogn) | O(n) | Hard | Two Pointers, Sliding Window | |
1924 | Erect the Fence II | C++ Python | O(n) on average | O(n) | Hard | π | Welzl's Algorithm |
1956 | Minimum Time For K Virus Variants to Spread | C++ Python | O(nlogn * logr) | O(n) | Hard | π | Geometry, Binary Search, Line Sweep, Segment Tree, Coordinate Compression |
2101 | Detonate the Maximum Bombs | C++ Python | O(|V|^2 + \V| * |E|) | O(\V| + |E|) | Medium | Graph, DFS, BFS |
# | Title | Solution | Time | Space | Difficulty | Tag | Note |
---|---|---|---|---|---|---|---|
1138 | Alphabet Board Path | C++ Python | O(n) | O(1) | Medium | ||
1243 | Array Transformation | C++ Python | O(n^2) | O(n) | Easy | ||
2061 | Number of Spaces Cleaning Robot Cleaned | C++ Python | O(m * n) | O(1) | Medium | π | |
2162 | Minimum Cost to Set Cooking Time | C++ Python | O(1) | O(1) | Medium |
# | Title | Solution | Time | Space | Difficulty | Tag | Note |
---|---|---|---|---|---|---|---|
1146 | Snapshot Array | C++ Python | set: O(1) get: O(logn) |
O(n) | Medium | ||
1166 | Design File System | C++ Python | create: O(n) get: O(n) |
O(n) | Medium | π | |
1172 | Dinner Plate Stacks | C++ Python | push: O(logn) pop: O(1), amortized popAtStack: (logn) |
O(n * c) | Hard | ||
1206 | Design Skiplist | C++ Python | O(logn), on average | O(n) | Hard | ||
1236 | Web Crawler | C++ Python | O(|V| + |E|) | O(|V|) | Medium | π | BFS, DFS |
1244 | Design A Leaderboard | C++ Python | ctor: O(1) add: O(1) top: O(n) reset: O(1) |
O(n) | Medium | ||
1268 | Search Suggestions System | C++ Python | ctor: O(n * l) suggest: O(l^2) |
O(t) | Medium | Trie | |
1286 | Iterator for Combination | C++ Python | O(k) | O(k) | Medium | Stack | |
1348 | Tweet Counts Per Frequency | C++ Python | add: O(logn) query: O(c) |
O(n) | Medium | ||
1352 | Product of the Last K Numbers | C++ Python | ctor: O(1) add: O(1) get: O(1) |
O(n) | Medium | ||
1357 | Apply Discount Every n Orders | C++ Python | ctor: O(m) getBill: O(p) |
O(m) | Medium | ||
1381 | Design a Stack With Increment Operation | C++ Python | ctor: O(1) push: O(1) pop: O(1) increment: O(1) |
O(n) | Medium | ||
1396 | Design Underground System | C++ Python | ctor: O(1) checkin: O(1) checkout: O(1) getaverage: O(1) |
O(n) | Medium | ||
1429 | First Unique Number | C++ Python | ctor: O(k) add: O(1) showFirstUnique: O(1) |
O(n) | Medium | π | LinkedHashSet |
1472 | Design Browser History | C++ Python | ctor: O(1) visit: O(1) back: O(1) forward: O(1) |
O(n) | Medium | ||
1476 | Subrectangle Queries | C++ Python | ctor: O(1) update: O(1) get: O(u) |
O(u) | Medium | ||
1483 | Kth Ancestor of a Tree Node | C++ Python | ctor: O(n * logh) get: O(logh) |
O(n * logh) | Hard | DP, Binary Lifting | |
1500 | Design a File Sharing System | C++ Python | ctor: O(1) join: O(logu + c) leave: O(logu + c) request: O(u) |
O(u * c) | Medium | π | |
1570 | Dot Product of Two Sparse Vectors | C++ Python | ctor: O(n) dot_product: O(min(n, m)) |
O(n) | Medium | π | |
1586 | Binary Search Tree Iterator II | C++ Python | O(1), amortized | O(h) | Medium | π | |
1600 | Throne Inheritance | C++ Python | ctor: O(1) birth: O(1) death: O(1) inherit: O(n) |
O(n) | Medium | ||
1603 | Design Parking System | C++ Python | O(1) | O(1) | Easy | ||
1622 | Fancy Sequence | C++ Python | O(1) | O(n) | Hard | Euler's Theorem |
|
1628 | Design an Expression Tree With Evaluate Function | C++ Python | O(n) | O(h) | Medium | π | |
1656 | Design an Ordered Stream | C++ Python | O(1), amortized | O(n) | Easy | ||
1670 | Design Front Middle Back Queue | C++ Python | O(1) | O(n) | Medium | ||
1756 | Design Most Recently Used Queue | C++ Python | ctor: O(nlogn) fetch: O(logn) |
O(n) | Medium | π | Sorted List, BIT, Fenwick Tree, Square Root Decomposition |
1797 | Design Authentication Manager | C++ Python | ctor: O(1) generate: O(1), amortized renew: O(1), amortized count: O(1), amortized |
O(n) | Medium | OrderedDict | |
1804 | Implement Trie II (Prefix Tree) | C++ Python | ctor: O(1) insert: O(n) count_word: O(n) count_prefix: O(n) erase: O(n) |
O(t) | Medium | π | Trie |
1825 | Finding MK Average | C++ Python | ctor: O(1) add_element: O(logn) calc_mkaverge: O(1) |
O(m) | Hard | Sorted List | |
1845 | Seat Reservation Manager | C++ Python | ctor: O(n) reserve: O(logn) unreserve: O(logn) |
O(n) | Medium | Heap | |
1865 | Finding Pairs With a Certain Sum | C++ Python | ctor: O(n1 + n2) add: O(1) count: O(n1) |
O(n1 + n2) | Medium | Hash Table | |
1912 | Design Movie Rental System | C++ Python | ctor: O(nlogn) search: O(logn) rent: O(logn) drop: O(logn) report: O(logn) |
O(n) | Hard | Ordered List | |
1993 | Operations on Tree | C++ Python | ctor: O(n) lock: O(1) unlock: O(1) upgrade: O(n) |
O(n) | Medium | ||
2013 | Detect Squares | C++ Python | ctor: O(1) add: O(1) count: O(n) |
O(n) | Medium | ||
2034 | Stock Price Fluctuation | C++ Python | ctor: O(1) update: O(logn) current: O(1) max: O(1) min: O(1) |
O(n) | Medium | Sorted List, Heap | |
2043 | Simple Bank System | C++ Python | ctor: O(1) transer: O(1) deposit: O(1) withdraw: O(1) |
O(1) | Medium | ||
2069 | Walking Robot Simulation II | C++ Python | O(1) | O(1) | Medium | Simulation, Math | |
2080 | Range Frequency Queries | C++ Python | ctor: O(n) query: O(logn) |
O(n) | Medium | Binary Search | |
2102 | Sequentially Ordinal Rank Tracker | C++ Python | add: O(logn) get: O(logn) |
O(n) | Hard | Sorted List | |
2166 | Design Bitset | C++ Python | ctor: O(n) fix: O(1) fix: O(1) unfix: O(1) flip: O(1) all: O(1) one: O(1) count: O(1) toString: O(n) |
O(n) | Medium |
# | Title | Solution | Time | Space | Difficulty | Tag | Note |
---|---|---|---|---|---|---|---|
1114 | Print in Order | C++ Python | O(n) | O(1) | Easy | ||
1115 | Print FooBar Alternately | C++ Python | O(n) | O(1) | Medium | ||
1116 | Print Zero Even Odd | C++ Python | O(n) | O(1) | Medium | ||
1117 | Building H2O | C++ Python | O(n) | O(1) | Hard | ||
1188 | Design Bounded Blocking Queue | C++ Python | O(n) | O(1) | Medium | π | |
1195 | Fizz Buzz Multithreaded | C++ Python | O(n) | O(1) | Medium | ||
1226 | The Dining Philosophers | C++ Python | O(n) | O(1) | Medium | ||
1242 | Web Crawler Multithreaded | C++ Python | O(|V| + |E|) | O(|V|) | Medium | π | |
1279 | Traffic Light Controlled Intersection | C++ Python | O(n) | O(1) | Easy | π |
# | Title | Solution | Time | Space | Difficulty | Tag | Note |
---|