company prep
Microsoft
Problems frequently reported at Microsoft, in course order. Solve the must-dos first.
61 easy137 medium28 hardIn-place linked-list rewiring ×17Simulation ×11Frequency counting ×111D DP ×9Two pointers (opposite ends) ×9Hash lookup (seen before?) ×9
02 · Arrays & Strings in Java
- #58Length of Last WordEasy
- #1672Richest Customer WealthEasy
- #1431Kids With the Greatest Number of CandiesEasy
- #1470Shuffle the ArrayEasy
- #1512Number of Good PairsEasy
03 · OOP for DSA & Design Rounds
- #707Design Linked ListMedium
06 · Mindset & Problem Solving
- #1480Running Sum of 1d ArrayEasy
- #412Fizz BuzzEasy
08 · Recursion
- #509Fibonacci NumberEasymust-do
- #344Reverse StringEasy
- #24Swap Nodes in PairsMedium
- #50Pow(x, n)Mediummust-do
- #779K-th Symbol in GrammarMedium
09 · Math & Number Theory
- #66Plus OneEasy
- #9Palindrome NumberEasy
- #7Reverse IntegerMediummust-do
- #172Factorial Trailing ZeroesMedium
- #204Count PrimesMedium
- #43Multiply StringsMediummust-do
- #149Max Points on a LineHard
10 · Arrays & Strings
- #122Best Time to Buy and Sell Stock IIMedium
- #53Maximum SubarrayMediummust-do
- #918Maximum Sum Circular SubarrayMedium
- #169Majority ElementEasymust-do
- #238Product of Array Except SelfMediummust-do
- #242Valid AnagramEasymust-do
- #14Longest Common PrefixEasy
- #189Rotate ArrayMedium
- #31Next PermutationMediummust-do
- #41First Missing PositiveHardmust-do
11 · Matrices & Simulation
- #48Rotate ImageMediummust-do
- #54Spiral MatrixMediummust-do
- #6Zigzag ConversionMedium
- #73Set Matrix ZeroesMediummust-do
- #289Game of LifeMediummust-do
12 · Two Pointers
- #125Valid PalindromeEasymust-do
- #977Squares of a Sorted ArrayEasy
- #153SumMediummust-do
- #11Container With Most WaterMediummust-do
- #27Remove ElementEasy
- #26Remove Duplicates from Sorted ArrayEasy
- #80Remove Duplicates from Sorted Array IIMedium
- #283Move ZeroesEasy
- #88Merge Sorted ArrayEasymust-do
- #75Sort ColorsMediummust-do
13 · Sliding Window
- #643Maximum Average Subarray IEasy
- #424Longest Repeating Character ReplacementMediummust-do
- #567Permutation in StringMediummust-do
- #438Find All Anagrams in a StringMediummust-do
- #209Minimum Size Subarray SumMediummust-do
- #1004Max Consecutive Ones IIIMediummust-do
- #219Contains Duplicate IIEasy
- #30Substring with Concatenation of All WordsHard
14 · Hashing & Prefix Sums
- #1Two SumEasymust-do
- #217Contains DuplicateEasymust-do
- #383Ransom NoteEasy
- #409Longest PalindromeEasy
- #128Longest Consecutive SequenceMediummust-do
- #36Valid SudokuMedium
- #303Range Sum Query - ImmutableEasymust-do
- #560Subarray Sum Equals KMediummust-do
15 · Linked Lists
- #206Reverse Linked ListEasymust-do
- #21Merge Two Sorted ListsEasymust-do
- #876Middle of the Linked ListEasy
- #141Linked List CycleEasymust-do
- #234Palindrome Linked ListEasymust-do
- #19Remove Nth Node From End of ListMediummust-do
- #142Linked List Cycle IIMediummust-do
- #287Find the Duplicate NumberMediummust-do
- #92Reverse Linked List IIMedium
- #328Odd Even Linked ListMedium
- #86Partition ListMedium
- #82Remove Duplicates from Sorted List IIMedium
- #61Rotate ListMedium
- #143Reorder ListMediummust-do
- #2Add Two NumbersMediummust-do
- #138Copy List with Random PointerMedium
- #25Reverse Nodes in k-GroupHardmust-do
16 · Stacks & Monotonic Stack
- #155Min StackMediummust-do
- #739Daily TemperaturesMediummust-do
- #496Next Greater Element IEasy
- #84Largest Rectangle in HistogramHardmust-do
- #394Decode StringMediummust-do
- #71Simplify PathMedium
- #32Longest Valid ParenthesesHard
- #735Asteroid CollisionMediummust-do
- #844Backspace String CompareEasy
17 · Queues & Deques
- #232Implement Queue using StacksEasymust-do
- #225Implement Stack using QueuesEasy
- #622Design Circular QueueMediummust-do
- #239Sliding Window MaximumHardmust-do
18 · Binary Search
- #704Binary SearchEasymust-do
- #35Search Insert PositionEasymust-do
- #34Find First and Last Position of Element in Sorted ArrayMediummust-do
- #74Search a 2D MatrixMedium
- #33Search in Rotated Sorted ArrayMediummust-do
- #153Find Minimum in Rotated Sorted ArrayMediummust-do
- #875Koko Eating BananasMediummust-do
- #162Find Peak ElementMediummust-do
- #4Median of Two Sorted ArraysHard
- #278First Bad VersionEasymust-do
- #658Find K Closest ElementsMedium
19 · Sorting
- #912Sort an ArrayMediummust-do
- #179Largest NumberMediummust-do
- #148Sort ListMediummust-do
20 · String Parsing & Expression Evaluation
- #13Roman to IntegerEasymust-do
- #12Integer to RomanMedium
- #151Reverse Words in a StringMediummust-do
- #8String to Integer (atoi)Mediummust-do
- #227Basic Calculator IIMediummust-do
- #224Basic CalculatorHardmust-do
21 · Tree Traversals
- #94Binary Tree Inorder TraversalEasymust-do
- #102Binary Tree Level Order TraversalMediummust-do
- #103Binary Tree Zigzag Level Order TraversalMedium
- #117Populating Next Right Pointers in Each Node IIMedium
- #662Maximum Width of Binary TreeMedium
- #863All Nodes Distance K in Binary TreeMediummust-do
- #297Serialize and Deserialize Binary TreeHardmust-do
22 · Tree Recursion
- #104Maximum Depth of Binary TreeEasymust-do
- #110Balanced Binary TreeEasy
- #100Same TreeEasy
- #226Invert Binary TreeEasymust-do
- #101Symmetric TreeEasymust-do
- #572Subtree of Another TreeEasymust-do
- #112Path SumEasy
- #113Path Sum IIMediummust-do
- #129Sum Root to Leaf NumbersMedium
- #1448Count Good Nodes in Binary TreeMediummust-do
- #222Count Complete Tree NodesMedium
- #437Path Sum IIIMediummust-do
- #124Binary Tree Maximum Path SumHardmust-do
- #105Construct Binary Tree from Preorder and Inorder TraversalMedium
- #106Construct Binary Tree from Inorder and Postorder TraversalMedium
- #114Flatten Binary Tree to Linked ListMedium
23 · Binary Search Trees
- #700Search in a Binary Search TreeEasy
- #701Insert into a Binary Search TreeMedium
- #98Validate Binary Search TreeMediummust-do
- #230Kth Smallest Element in a BSTMediummust-do
- #235Lowest Common Ancestor of a Binary Search TreeMediummust-do
- #285Inorder Successor in BSTMediummust-do
- #108Convert Sorted Array to Binary Search TreeEasy
- #173Binary Search Tree IteratorMediummust-do
- #220Contains Duplicate IIIHard
24 · Heaps & Priority Queues
- #703Kth Largest Element in a StreamEasymust-do
- #215Kth Largest Element in an ArrayMediummust-do
- #621Task SchedulerMedium
- #767Reorganize StringMedium
25 · Tries
- #208Implement Trie (Prefix Tree)Mediummust-do
- #211Design Add and Search Words Data StructureMediummust-do
- #212Word Search IIHardmust-do
- #648Replace WordsMedium
- #720Longest Word in DictionaryMedium
26 · Graphs: BFS & DFS
- #733Flood FillEasy
- #695Max Area of IslandMediummust-do
- #133Clone GraphMediummust-do
- #994Rotting OrangesMediummust-do
- #54201 MatrixMediummust-do
- #286Walls and GatesMedium
- #1091Shortest Path in Binary MatrixMediummust-do
- #909Snakes and LaddersMedium
- #1197Minimum Knight MovesMedium
- #433Minimum Genetic MutationMedium
- #127Word LadderHardmust-do
28 · Union-Find & Minimum Spanning Trees
- #547Number of ProvincesMediummust-do
- #684Redundant ConnectionMediummust-do
- #721Accounts MergeMediummust-do
- #1584Min Cost to Connect All PointsMediummust-do
29 · Topological Sort
- #207Course ScheduleMediummust-do
- #310Minimum Height TreesMediummust-do
- #329Longest Increasing Path in a MatrixHardmust-do
31 · Backtracking
- #78SubsetsMediummust-do
- #77CombinationsMediummust-do
- #46PermutationsMediummust-do
- #39Combination SumMediummust-do
- #40Combination Sum IIMedium
- #17Letter Combinations of a Phone NumberMedium
- #22Generate ParenthesesMediummust-do
- #51N-QueensHardmust-do
- #52N-Queens IIHard
- #37Sudoku SolverHard
32 · Greedy Algorithms
- #55Jump GameMediummust-do
- #45Jump Game IIMediummust-do
- #134Gas StationMediummust-do
- #135CandyHard
33 · Intervals
- #57Insert IntervalMediummust-do
- #452Minimum Number of Arrows to Burst BalloonsMedium
34 · Bit Manipulation
- #191Number of 1 BitsEasymust-do
- #338Counting BitsEasymust-do
- #190Reverse BitsEasy
- #268Missing NumberEasymust-do
- #67Add BinaryEasymust-do
- #371Sum of Two IntegersMedium
- #137Single Number IIMedium
35 · Dynamic Programming
- #70Climbing StairsEasymust-do
- #746Min Cost Climbing StairsEasy
- #198House RobberMediummust-do
- #213House Robber IIMediummust-do
- #91Decode WaysMediummust-do
- #152Maximum Product SubarrayMediummust-do
- #518Coin Change IIMedium
- #377Combination Sum IVMedium
- #416Partition Equal Subset SumMediummust-do
- #63Unique Paths IIMedium
- #64Minimum Path SumMedium
- #120TriangleMedium
- #300Longest Increasing SubsequenceMediummust-do
- #1143Longest Common SubsequenceMediummust-do
- #72Edit DistanceMediummust-do
- #5Longest Palindromic SubstringMediummust-do
36 · DP Patterns
- #309Best Time to Buy and Sell Stock with CooldownMediummust-do
- #714Best Time to Buy and Sell Stock with Transaction FeeMedium
- #123Best Time to Buy and Sell Stock IIIHard
- #188Best Time to Buy and Sell Stock IVHardmust-do
- #10Regular Expression MatchingHardmust-do
- #97Interleaving StringMediummust-do
- #647Palindromic SubstringsMediummust-do
- #494Target SumMediummust-do
- #1235Maximum Profit in Job SchedulingHardmust-do
37 · Design Data Structures
- #981Time Based Key-Value StoreMediummust-do
- #895Maximum Frequency StackHardmust-do
- #588Design In-Memory File SystemHard
38 · Segment Trees, Fenwick & String Matching
- #315Count of Smaller Numbers After SelfHardmust-do
- #28Find the Index of the First Occurrence in a StringEasymust-do
- #459Repeated Substring PatternEasy
- #1392Longest Happy PrefixHardmust-do
- #214Shortest PalindromeHard