company prep
Problems frequently reported at Google, in course order. Solve the must-dos first.
65 easy142 medium45 hardSimulation ×12Hash lookup (seen before?) ×12Frequency counting ×11Bit tricks (shift, mask, lowest set bit) ×9Union-Find (DSU) ×91D DP ×8
02 · Arrays & Strings in Java
- #58Length of Last WordEasy
- #1929Concatenation of ArrayEasy
- #1672Richest Customer WealthEasy
- #1470Shuffle the ArrayEasy
- #1512Number of Good PairsEasy
06 · Mindset & Problem Solving
- #1480Running Sum of 1d ArrayEasy
- #412Fizz BuzzEasy
07 · Big-O & Complexity
- #69Sqrt(x)Easy
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
- #202Happy NumberEasy
- #7Reverse IntegerMediummust-do
- #43Multiply StringsMediummust-do
- #528Random Pick with WeightMediummust-do
- #149Max Points on a LineHard
10 · Arrays & Strings
- #122Best Time to Buy and Sell Stock IIMedium
- #918Maximum Sum Circular SubarrayMedium
- #169Majority ElementEasymust-do
- #14Longest Common PrefixEasy
- #189Rotate ArrayMedium
- #41First Missing PositiveHardmust-do
11 · Matrices & Simulation
- #48Rotate ImageMediummust-do
- #6Zigzag ConversionMedium
- #289Game of LifeMediummust-do
12 · Two Pointers
- #977Squares of a Sorted ArrayEasy
- #167Two Sum II - Input Array Is SortedMediummust-do
- #163Sum ClosestMedium
- #27Remove ElementEasy
- #26Remove Duplicates from Sorted ArrayEasy
- #88Merge Sorted ArrayEasymust-do
- #392Is SubsequenceEasy
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
- #409Longest PalindromeEasy
- #205Isomorphic StringsEasy
- #290Word PatternEasy
- #128Longest Consecutive SequenceMediummust-do
- #303Range Sum Query - ImmutableEasymust-do
- #304Range Sum Query 2D - ImmutableMedium
- #525Contiguous ArrayMedium
15 · Linked Lists
- #206Reverse Linked ListEasymust-do
- #21Merge Two Sorted ListsEasymust-do
- #141Linked List CycleEasymust-do
- #19Remove Nth Node From End of ListMediummust-do
- #142Linked List Cycle IIMediummust-do
- #287Find the Duplicate NumberMediummust-do
- #2Add Two NumbersMediummust-do
- #25Reverse Nodes in k-GroupHardmust-do
16 · Stacks & Monotonic Stack
- #155Min StackMediummust-do
- #150Evaluate Reverse Polish NotationMediummust-do
- #739Daily TemperaturesMediummust-do
- #496Next Greater Element IEasy
- #84Largest Rectangle in HistogramHardmust-do
- #853Car FleetMedium
- #394Decode StringMediummust-do
- #71Simplify PathMedium
- #32Longest Valid ParenthesesHard
- #844Backspace String CompareEasy
17 · Queues & Deques
- #933Number of Recent CallsEasy
- #362Design Hit CounterMedium
- #239Sliding Window MaximumHardmust-do
- #950Reveal Cards In Increasing OrderMedium
- #2073Time Needed to Buy TicketsEasy
- #862Shortest Subarray with Sum at Least KHard
18 · Binary Search
- #704Binary SearchEasymust-do
- #35Search Insert PositionEasymust-do
- #74Search a 2D MatrixMedium
- #153Find Minimum in Rotated Sorted ArrayMediummust-do
- #875Koko Eating BananasMediummust-do
- #1011Capacity To Ship Packages Within D DaysMedium
- #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
- #274H-IndexMedium
- #493Reverse PairsHard
- #324Wiggle Sort IIMedium
20 · String Parsing & Expression Evaluation
- #13Roman to IntegerEasymust-do
- #151Reverse Words in a StringMediummust-do
- #8String to Integer (atoi)Mediummust-do
- #224Basic CalculatorHardmust-do
- #271Encode and Decode StringsMediummust-do
- #68Text JustificationHard
21 · Tree Traversals
- #94Binary Tree Inorder TraversalEasymust-do
- #637Average of Levels in Binary TreeEasy
- #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
22 · Tree Recursion
- #110Balanced Binary TreeEasy
- #100Same TreeEasy
- #226Invert Binary TreeEasymust-do
- #101Symmetric TreeEasymust-do
- #572Subtree of Another TreeEasymust-do
- #129Sum Root to Leaf NumbersMedium
- #1448Count Good Nodes in Binary TreeMediummust-do
- #222Count Complete Tree NodesMedium
- #437Path Sum IIIMediummust-do
- #543Diameter of Binary TreeEasymust-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
- #230Kth Smallest Element in a BSTMediummust-do
- #235Lowest Common Ancestor of a Binary Search TreeMediummust-do
- #285Inorder Successor in BSTMediummust-do
- #530Minimum Absolute Difference in BSTEasy
- #108Convert Sorted Array to Binary Search TreeEasy
- #173Binary Search Tree IteratorMediummust-do
- #220Contains Duplicate IIIHard
- #729My Calendar IMedium
24 · Heaps & Priority Queues
- #703Kth Largest Element in a StreamEasymust-do
- #1046Last Stone WeightEasy
- #973K Closest Points to OriginMediummust-do
- #355Design TwitterMedium
- #767Reorganize StringMedium
- #373Find K Pairs with Smallest SumsMedium
- #502IPOHard
- #632Smallest Range Covering Elements from K ListsHard
- #692Top K Frequent WordsMedium
25 · Tries
- #208Implement Trie (Prefix Tree)Mediummust-do
- #211Design Add and Search Words Data StructureMediummust-do
- #212Word Search IIHardmust-do
- #648Replace WordsMedium
- #1268Search Suggestions SystemMediummust-do
- #336Palindrome PairsHard
26 · Graphs: BFS & DFS
- #733Flood FillEasy
- #695Max Area of IslandMediummust-do
- #133Clone GraphMediummust-do
- #54201 MatrixMediummust-do
- #286Walls and GatesMedium
- #417Pacific Atlantic Water FlowMedium
- #130Surrounded RegionsMedium
- #785Is Graph Bipartite?Mediummust-do
- #1091Shortest Path in Binary MatrixMediummust-do
- #909Snakes and LaddersMedium
- #1197Minimum Knight MovesMedium
- #433Minimum Genetic MutationMedium
27 · Shortest Paths
- #743Network Delay TimeMediummust-do
- #787Cheapest Flights Within K StopsMediummust-do
- #1514Path with Maximum ProbabilityMedium
- #1631Path With Minimum EffortMediummust-do
- #778Swim in Rising WaterHard
- #1368Minimum Cost to Make at Least One Valid Path in a GridHard
- #2290Minimum Obstacle Removal to Reach CornerHardmust-do
- #1976Number of Ways to Arrive at DestinationMedium
28 · Union-Find & Minimum Spanning Trees
- #547Number of ProvincesMediummust-do
- #323Number of Connected Components in an Undirected GraphMedium
- #684Redundant ConnectionMediummust-do
- #261Graph Valid TreeMediummust-do
- #721Accounts MergeMediummust-do
- #1584Min Cost to Connect All PointsMediummust-do
29 · Topological Sort
- #269Alien DictionaryHardmust-do
- #802Find Eventual Safe StatesMedium
- #2050Parallel Courses IIIHard
- #310Minimum Height TreesMediummust-do
- #329Longest Increasing Path in a MatrixHardmust-do
- #2392Build a Matrix With ConditionsHard
30 · Advanced Graphs: Euler Paths, Bridges & SCCs
- #332Reconstruct ItineraryHardmust-do
- #1192Critical Connections in a NetworkHardmust-do
- #399Evaluate DivisionMediummust-do
- #815Bus RoutesHard
31 · Backtracking
- #78SubsetsMediummust-do
- #77CombinationsMediummust-do
- #90Subsets IIMediummust-do
- #46PermutationsMediummust-do
- #40Combination Sum IIMedium
- #17Letter Combinations of a Phone NumberMedium
- #22Generate ParenthesesMediummust-do
- #131Palindrome PartitioningMedium
- #51N-QueensHardmust-do
- #52N-Queens IIHard
- #37Sudoku SolverHard
32 · Greedy Algorithms
- #55Jump GameMediummust-do
- #45Jump Game IIMediummust-do
- #134Gas StationMediummust-do
- #1899Merge Triplets to Form Target TripletMedium
- #763Partition LabelsMedium
- #678Valid Parenthesis StringMediummust-do
- #846Hand of StraightsMedium
- #135CandyHard
33 · Intervals
- #228Summary RangesEasy
- #252Meeting RoomsEasy
- #57Insert IntervalMediummust-do
- #435Non-overlapping IntervalsMediummust-do
- #452Minimum Number of Arrows to Burst BalloonsMedium
- #759Employee Free TimeHard
- #1851Minimum Interval to Include Each QueryHard
34 · Bit Manipulation
- #136Single NumberEasymust-do
- #191Number of 1 BitsEasymust-do
- #338Counting BitsEasymust-do
- #268Missing NumberEasymust-do
- #67Add BinaryEasymust-do
- #371Sum of Two IntegersMedium
- #137Single Number IIMedium
- #260Single Number IIIMedium
- #231Power of TwoEasy
- #201Bitwise AND of Numbers RangeMedium
35 · Dynamic Programming
- #70Climbing StairsEasymust-do
- #746Min Cost Climbing StairsEasy
- #213House Robber IIMediummust-do
- #91Decode WaysMediummust-do
- #152Maximum Product SubarrayMediummust-do
- #518Coin Change IIMedium
- #377Combination Sum IVMedium
- #416Partition Equal Subset SumMediummust-do
- #62Unique PathsMediummust-do
- #63Unique Paths IIMedium
- #64Minimum Path SumMedium
- #120TriangleMedium
- #221Maximal SquareMedium
- #1143Longest Common SubsequenceMediummust-do
- #72Edit DistanceMediummust-do
- #312Burst BalloonsHard
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
- #115Distinct SubsequencesHard
- #647Palindromic SubstringsMediummust-do
- #494Target SumMediummust-do
- #1235Maximum Profit in Job SchedulingHardmust-do
- #486Predict the WinnerMedium
37 · Design Data Structures
- #981Time Based Key-Value StoreMediummust-do
- #2013Detect SquaresMedium
- #895Maximum Frequency StackHardmust-do
- #588Design In-Memory File SystemHard
38 · Segment Trees, Fenwick & String Matching
- #307Range Sum Query - MutableMediummust-do
- #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
- #1044Longest Duplicate SubstringHard