Hard LeetCode Problems: All 661, With Python Solutions

Hard problems usually combine two techniques, or need a non-obvious invariant before any technique applies at all. They are worth studying for the ideas rather than for the odds of being asked one.

The rating is LeetCode's own, carried through unchanged — we do not re-score anything. This library holds 661 Hard-rated problems, 505 of them with a complete Python solution, a worked example and complexity analysis.

The patterns behind hard problems

The six patterns with the most Hard-rated problems in this library. Working through a pattern beats working down a difficulty list, because the technique transfers and a difficulty band does not.

  • Dynamic Programming · 226 Hard problems — Define a state, write the transition, and stop recomputing the same subproblem.
  • Math and Number Theory · 120 Hard problems — Find the closed form, the invariant, or the modular identity — and skip the loop entirely.
  • Depth-First Search · 111 Hard problems — Follow one path to its end before trying the next — the default way to explore a graph.
  • Hash Map · 110 Hard problems — Trade memory for time: remember what you have seen so the second pass never happens.
  • Sorting · 94 Hard problems — Spend O(n log n) once to buy an ordering that makes the rest of the problem trivial.
  • Monotonic Stack · 89 Hard problems — Answer "what is the next greater element" for every position in one pass.

Hard problems

Showing the first 200 of 661 problems. Problems with a complete Python solution are listed first, then by ascending problem number.

#ProblemDifficultyTopics
4Median of Two Sorted ArraysHardArray, Binary Search, Divide and Conquer
10Regular Expression MatchingHardRecursion, String, Dynamic Programming
23Merge k Sorted ListsHardLinked List, Divide and Conquer, Heap (Priority Queue) +1
25Reverse Nodes in k-GroupHardRecursion, Linked List
30Substring with Concatenation of All WordsHardHash Table, String, Sliding Window
32Longest Valid ParenthesesHardStack, String, Dynamic Programming
37Sudoku SolverHardArray, Hash Table, Backtracking +1
41First Missing PositiveHardArray, Hash Table
42Trapping Rain WaterHardStack, Array, Two Pointers +2
44Wildcard MatchingHardGreedy, Recursion, String +1
51N-QueensHardArray, Backtracking
52N-Queens IIHardBacktracking
60Permutation SequenceHardRecursion, Math
65Valid NumberHardString
68Text JustificationHardArray, String, Simulation
76Minimum Window SubstringHardHash Table, String, Sliding Window
84Largest Rectangle in HistogramHardStack, Array, Monotonic Stack
85Maximal RectangleHardStack, Array, Dynamic Programming +2
87Scramble StringHardString, Dynamic Programming
115Distinct SubsequencesHardString, Dynamic Programming
123Best Time to Buy and Sell Stock IIIHardArray, Dynamic Programming
124Binary Tree Maximum Path SumHardTree, Depth-First Search, Dynamic Programming +1
126Word Ladder IIHardBreadth-First Search, Hash Table, String +1
127Word LadderHardBreadth-First Search, Hash Table, String
132Palindrome Partitioning IIHardString, Dynamic Programming
135CandyHardGreedy, Array
140Word Break IIHardTrie, Memoization, Array +4
149Max Points on a LineHardGeometry, Array, Hash Table +1
154Find Minimum in Rotated Sorted Array IIHardArray, Binary Search
174Dungeon GameHardArray, Dynamic Programming, Matrix
185Department Top Three SalariesHardDatabase
188Best Time to Buy and Sell Stock IVHardArray, Dynamic Programming
212Word Search IIHardTrie, Array, String +2
214Shortest PalindromeHardString, String Matching, Hash Function +1
218The Skyline ProblemHardBinary Indexed Tree, Segment Tree, Array +5
220Contains Duplicate IIIHardArray, Bucket Sort, Ordered Set +2
224Basic CalculatorHardStack, Recursion, Math +1
233Number of Digit OneHardRecursion, Math, Dynamic Programming
239Sliding Window MaximumHardQueue, Array, Sliding Window +2
262Trips and UsersHardDatabase
273Integer to English WordsHardRecursion, Math, String
282Expression Add OperatorsHardMath, String, Backtracking
295Find Median from Data StreamHardDesign, Two Pointers, Data Stream +2
297Serialize and Deserialize Binary TreeHardTree, Depth-First Search, Breadth-First Search +3
301Remove Invalid ParenthesesHardBreadth-First Search, String, Backtracking
312Burst BalloonsHardArray, Dynamic Programming
315Count of Smaller Numbers After SelfHardBinary Indexed Tree, Segment Tree, Array +4
321Create Maximum NumberHardStack, Greedy, Array +2
327Count of Range SumHardBinary Indexed Tree, Segment Tree, Array +4
329Longest Increasing Path in a MatrixHardDepth-First Search, Breadth-First Search, Graph +5
330Patching ArrayHardGreedy, Array
332Reconstruct ItineraryHardDepth-First Search, Graph, Eulerian Circuit
335Self CrossingHardGeometry, Array, Math
336Palindrome PairsHardTrie, Array, Hash Table +1
352Data Stream as Disjoint IntervalsHardUnion Find, Design, Hash Table +3
354Russian Doll EnvelopesHardArray, Binary Search, Dynamic Programming +1
363Max Sum of Rectangle No Larger Than KHardArray, Binary Search, Matrix +2
381Insert Delete GetRandom O(1) - Duplicates allowedHardDesign, Array, Hash Table +2
391Perfect RectangleHardGeometry, Array, Hash Table +2
403Frog JumpHardArray, Dynamic Programming
407Trapping Rain Water IIHardBreadth-First Search, Array, Matrix +1
410Split Array Largest SumHardGreedy, Array, Binary Search +2
420Strong Password CheckerHardGreedy, String, Heap (Priority Queue)
432All O`one Data StructureHardDesign, Hash Table, Linked List +1
440K-th Smallest in Lexicographical OrderHardTrie
446Arithmetic Slices II - SubsequenceHardArray, Dynamic Programming
458Poor PigsHardMath, Dynamic Programming, Combinatorics
460LFU CacheHardDesign, Hash Table, Linked List +1
466Count The RepetitionsHardString, Dynamic Programming
472Concatenated WordsHardDepth-First Search, Trie, Array +3
479Largest Palindrome ProductHardMath, Enumeration
480Sliding Window MedianHardArray, Hash Table, Sliding Window +1
483Smallest Good BaseHardMath, Binary Search
488Zuma GameHardStack, Breadth-First Search, Memoization +2
493Reverse PairsHardBinary Indexed Tree, Segment Tree, Array +4
502IPOHardGreedy, Array, Sorting +1
514Freedom TrailHardDepth-First Search, Breadth-First Search, String +1
517Super Washing MachinesHardGreedy, Array
546Remove BoxesHardMemoization, Array, Dynamic Programming
552Student Attendance Record IIHardDynamic Programming
564Find the Closest PalindromeHardMath, String
587Erect the FenceHardGeometry, Array, Math
591Tag ValidatorHardStack, String
600Non-negative Integers without Consecutive OnesHardDynamic Programming
601Human Traffic of StadiumHardDatabase
629K Inverse Pairs ArrayHardDynamic Programming
630Course Schedule IIIHardGreedy, Array, Sorting +1
632Smallest Range Covering Elements from K ListsHardGreedy, Array, Hash Table +3
639Decode Ways IIHardString, Dynamic Programming
664Strange PrinterHardString, Dynamic Programming
668Kth Smallest Number in Multiplication TableHardMath, Binary Search
675Cut Off Trees for Golf EventHardBreadth-First Search, Array, Matrix +1
67924 GameHardArray, Math, Backtracking
685Redundant Connection IIHardDepth-First Search, Breadth-First Search, Union Find +1
689Maximum Sum of 3 Non-Overlapping SubarraysHardArray, Dynamic Programming, Prefix Sum +1
691Stickers to Spell WordHardBit Manipulation, Memoization, Array +5
699Falling SquaresHardSegment Tree, Array, Ordered Set
710Random Pick with BlacklistHardArray, Hash Table, Math +3
715Range ModuleHardDesign, Segment Tree, Ordered Set
719Find K-th Smallest Pair DistanceHardArray, Two Pointers, Binary Search +1
730Count Different Palindromic SubsequencesHardString, Dynamic Programming
732My Calendar IIIHardDesign, Segment Tree, Binary Search +2
736Parse Lisp ExpressionHardStack, Recursion, Hash Table +1
741Cherry PickupHardArray, Dynamic Programming, Matrix
745Prefix and Suffix SearchHardDesign, Trie, Array +2
749Contain VirusHardDepth-First Search, Breadth-First Search, Array +2
753Cracking the SafeHardDepth-First Search, Graph, Eulerian Circuit
757Set Intersection Size At Least TwoHardGreedy, Array, Sorting
761Special Binary StringHardRecursion, String
765Couples Holding HandsHardGreedy, Depth-First Search, Breadth-First Search +2
768Max Chunks To Make Sorted IIHardStack, Greedy, Array +2
773Sliding PuzzleHardBreadth-First Search, Memoization, Array +3
778Swim in Rising WaterHardDepth-First Search, Breadth-First Search, Union Find +4
780Reaching PointsHardMath
782Transform to ChessboardHardBit Manipulation, Array, Math +1
793Preimage Size of Factorial Zeroes FunctionHardMath, Binary Search
798Smallest Rotation with Highest ScoreHardArray, Prefix Sum
801Minimum Swaps To Make Sequences IncreasingHardArray, Dynamic Programming
803Bricks Falling When HitHardUnion Find, Array, Matrix
805Split Array With Same AverageHardBit Manipulation, Array, Math +2
810Chalkboard XOR GameHardBit Manipulation, Brainteaser, Array +2
815Bus RoutesHardBreadth-First Search, Array, Hash Table
818Race CarHardDynamic Programming
827Making A Large IslandHardDepth-First Search, Breadth-First Search, Union Find +2
828Count Unique Characters of All Substrings of a Given StringHardHash Table, String, Dynamic Programming
829Consecutive Numbers SumHardMath, Enumeration
834Sum of Distances in TreeHardTree, Depth-First Search, Graph +1
839Similar String GroupsHardDepth-First Search, Breadth-First Search, Union Find +3
847Shortest Path Visiting All NodesHardBit Manipulation, Breadth-First Search, Graph +2
850Rectangle Area IIHardSegment Tree, Array, Ordered Set +1
854K-Similar StringsHardBreadth-First Search, Hash Table, String
857Minimum Cost to Hire K WorkersHardGreedy, Array, Sorting +1
862Shortest Subarray with Sum at Least KHardQueue, Array, Binary Search +4
864Shortest Path to Get All KeysHardBit Manipulation, Breadth-First Search, Array +1
871Minimum Number of Refueling StopsHardGreedy, Array, Dynamic Programming +1
878Nth Magical NumberHardMath, Binary Search
879Profitable SchemesHardArray, Dynamic Programming
882Reachable Nodes In Subdivided GraphHardGraph, Shortest Path, Heap (Priority Queue)
887Super Egg DropHardMath, Binary Search, Dynamic Programming
891Sum of Subsequence WidthsHardArray, Math, Sorting
895Maximum Frequency StackHardStack, Design, Hash Table +1
899Orderly QueueHardMath, String, Sorting
902Numbers At Most N Given Digit SetHardArray, Math, String +2
903Valid Permutations for DI SequenceHardString, Dynamic Programming, Prefix Sum
906Super PalindromesHardMath, String, Enumeration
913Cat and MouseHardGraph, Topological Sort, Memoization +3
920Number of Music PlaylistsHardMath, Dynamic Programming, Combinatorics
924Minimize Malware SpreadHardDepth-First Search, Breadth-First Search, Union Find +3
927Three Equal PartsHardArray, Math
928Minimize Malware Spread IIHardDepth-First Search, Breadth-First Search, Union Find +3
936Stamping The SequenceHardStack, Greedy, Queue +1
940Distinct Subsequences IIHardString, Dynamic Programming
943Find the Shortest SuperstringHardBit Manipulation, Array, String +2
952Largest Component Size by Common FactorHardUnion Find, Array, Hash Table +2
956Tallest BillboardHardArray, Dynamic Programming
960Delete Columns to Make Sorted IIIHardArray, String, Dynamic Programming
964Least Operators to Express NumberHardMemoization, Math, Dynamic Programming
968Binary Tree CamerasHardTree, Depth-First Search, Dynamic Programming +1
975Odd Even JumpHardStack, Array, Dynamic Programming +3
980Unique Paths IIIHardBit Manipulation, Array, Backtracking +1
982Triples with Bitwise AND Equal To ZeroHardBit Manipulation, Array, Hash Table
987Vertical Order Traversal of a Binary TreeHardTree, Depth-First Search, Breadth-First Search +3
992Subarrays with K Different IntegersHardArray, Hash Table, Counting +1
995Minimum Number of K Consecutive Bit FlipsHardBit Manipulation, Queue, Array +2
996Number of Squareful ArraysHardBit Manipulation, Array, Hash Table +4
1000Minimum Cost to Merge StonesHardArray, Dynamic Programming, Prefix Sum
1001Grid IlluminationHardArray, Hash Table
1012Numbers With Repeated DigitsHardMath, Dynamic Programming
1028Recover a Tree From Preorder TraversalHardTree, Depth-First Search, String +1
1032Stream of CharactersHardDesign, Trie, Array +2
1036Escape a Large MazeHardDepth-First Search, Breadth-First Search, Array +1
1044Longest Duplicate SubstringHardString, Binary Search, Suffix Array +3
1074Number of Submatrices That Sum to TargetHardArray, Hash Table, Matrix +1
1092Shortest Common SupersequenceHardString, Dynamic Programming
1095Find in Mountain ArrayHardArray, Binary Search, Interactive
1096Brace Expansion IIHardStack, Breadth-First Search, Hash Table +3
1106Parsing A Boolean ExpressionHardStack, Recursion, String
1125Smallest Sufficient TeamHardBit Manipulation, Array, Dynamic Programming +1
1147Longest Chunked Palindrome DecompositionHardGreedy, Two Pointers, String +3
1157Online Majority Element In SubarrayHardDesign, Binary Indexed Tree, Segment Tree +2
1163Last Substring in Lexicographical OrderHardTwo Pointers, String
1172Dinner Plate StacksHardStack, Design, Hash Table +1
1178Number of Valid Words for Each PuzzleHardBit Manipulation, Trie, Array +2
1187Make Array Strictly IncreasingHardArray, Binary Search, Dynamic Programming +1
1192Critical Connections in a NetworkHardDepth-First Search, Graph, Biconnected Component
1203Sort Items by Groups Respecting DependenciesHardDepth-First Search, Breadth-First Search, Graph +1
1206Design SkiplistHardDesign, Linked List
1210Minimum Moves to Reach Target with RotationsHardBreadth-First Search, Array, Matrix
1220Count Vowels PermutationHardDynamic Programming
1223Dice Roll SimulationHardArray, Dynamic Programming
1224Maximum Equal FrequencyHardArray, Hash Table
1235Maximum Profit in Job SchedulingHardArray, Binary Search, Dynamic Programming +1
1240Tiling a Rectangle with the Fewest SquaresHardBacktracking
1250Check If It Is a Good ArrayHardArray, Math, Number Theory
1255Maximum Score Words Formed by LettersHardBit Manipulation, Array, Hash Table +5
1263Minimum Moves to Move a Box to Their Target LocationHardBreadth-First Search, Array, Matrix +1
1269Number of Ways to Stay in the Same Place After Some StepsHardDynamic Programming
1278Palindrome Partitioning IIIHardString, Dynamic Programming
1284Minimum Number of Flips to Convert Binary Matrix to Zero MatrixHardBit Manipulation, Breadth-First Search, Array +2
1289Minimum Falling Path Sum IIHardArray, Dynamic Programming, Matrix

Everything at once: the full LeetCode problem list.

A hard problem, live, with someone watching

Stealth Interview is a desktop app for macOS and Windows. It reads the coding problem off your screen, returns a working solution with a step-by-step explanation and its time and space complexity, and transcribes what the interviewer is saying — while staying invisible to screen sharing.