81 SECTIONS · 2014 TOPICS
Algorithm Patterns Roadmap
Using Recursion Patterns
- 1. Understanding Recursion Fundamentals
- Example: Factorial Calculation
- Recursion Execution Flow
- Core Principles of Recursion
- 2. Implementing Tail Recursion Optimization
- Example: Tail Recursion vs Regular Recursion
- 3. Converting Recursion to Iteration
- Example: Converting Tail Recursion to Loop
- Example: Tree Traversal (Post-order)
- 4. Calculating Factorials Recursively
- Example: Calculating Factorial
- 5. Generating Fibonacci Numbers
- Example: Memoized Recursive Implementation
- Example: Iterative Implementation
- Example: Matrix Exponentiation Implementation
- 6. Computing Power Function
- Example: Recursive Power Function
- Example: Iterative Power Function
- 7. Calculating GCD
- Example: Calculating GCD of 48 and 18
- 8. Reversing Strings Recursively
- Example: Reverse String Using Recursion
- 9. Implementing Tree Traversals
- Example: Inorder Traversal of BST
- 10. Generating All Subsets
- Example: Recursive Approach
- Example: Iterative Approach
- Example: Bit Manipulation Approach
- 11. Implementing Merge Sort
- Example: Merge Sort Implementation in JavaScript
- 12. Solving Tower of Hanoi Problem
- Example: Recursive Solution
Using Two Pointers Pattern
- 1. Understanding Two Pointers Technique
- Example: Finding a Pair with Target Sum
- Key Advantages
- 2. Solving Pair Sum Problems
- Example: Two Sum in Sorted Array
- Example: Three Sum
- 3. Removing Duplicates In-Place
- Example: Remove Duplicates from Sorted Array
- 4. Squaring Sorted Arrays
- Example: Squaring Sorted Arrays
- 5. Finding Triplet Sum
- Example: Finding Triplet Sum
- Algorithm Steps
- 6. Comparing Strings for Backspace
- Example: Comparing strings with backspace
- Key Points
- 7. Partitioning Arrays
- Example: Partitioning Around Pivot
- Partitioning Strategy
- 8. Trapping Rain Water
- Example: Trapping Rain Water
- Algorithm Summary
- 9. Finding Container with Most Water
- Example: Container With Most Water
- 10. Verifying Palindromes
- Example: Check if a string is palindrome
- Example: Handle special characters and spaces
- 11. Partitioning Arrays by Pivot
- Example: Partitioning Logic
- Partitioning Strategy
- 12. Merging Sorted Arrays In-Place
- Example: Merging Two Sorted Arrays In-Place
Using Sliding Window Pattern
- 1. Understanding Window Types
- 2. Finding Maximum Sum Subarray
- Example: Maximum Sum Subarray of Size k
- 3. Finding Longest Substring Without Repeats
- Example: Sliding Window Implementation
- 4. Finding Minimum Window Substring
- Example: Sliding Window to Find Minimum Substring
- 5. Finding Permutation in String
- Example: Check for permutation in string
- 6. Finding Longest Substring with K Distinct Characters
- Example: Sliding Window Implementation
- 7. Solving Fruits into Baskets Problem
- Example: Fruits into Baskets
- 8. Finding Longest Repeating Character Replacement
- Example: Sliding Window for Replacing Characters
- 9. Finding Maximum Consecutive Ones
- Example: Sliding Window Approach
- 10. Finding Minimum Size Subarray Sum
- Example: Finding Minimum Size Subarray Sum
- 11. Finding All Anagrams in String
- Example: Finding Anagrams in a String
- 12. Finding Substring with Concatenation
- Example: Finding Concatenated Substrings
Using Fast and Slow Pointers
- 1. Understanding Floyd's Cycle Detection
- Example: Detecting a Cycle in a Linked List
- 2. Detecting Cycle in LinkedList
- Example: Detecting Cycle in a LinkedList
- 3. Finding Middle of LinkedList
- Example: Finding Middle Node
- 4. Checking Palindrome LinkedList
- Example: isPalindrome
- 5. Finding Happy Number
- Example: Happy Number Check
- 6. Finding Cycle Start Node
- Example: Finding the Start of a Cycle in a Linked List
- 7. Rearranging LinkedList
- Example: Reorder List
- Example: Remove Duplicates
- 8. Finding Duplicate Number
- Example: Finding Duplicate Number Using Floyd's Cycle Detection
- 9. Removing Nth Node from End
- Example: Remove Nth Node from End
- 10. Detecting Intersection of Lists
- Example: Detecting List Intersection
Reversing LinkedList Nodes In-Place
- 1. Understanding In-Place Reversal Technique
- Example: Reversing a LinkedList In-Place
- 2. Reversing Entire LinkedList
- Example: Reversing a LinkedList In-Place
- 3. Reversing LinkedList Sublist
- Example: Reversing a Sublist
- 4. Reversing K-Group Nodes
- Example: Reversing K-Group Nodes
- 5. Reversing Alternating K-Groups
- Example: Reversing Alternating K-Groups
- 6. Rotating LinkedList by K Positions
- Example: Rotating a LinkedList by K=2
- 7. Swapping Nodes in Pairs
- Example: Swapping Nodes in Pairs
- 8. Reversing Every K Elements
- Example: Reverse Every K Nodes
- 9. Reordering LinkedList
- Example: Reordering a LinkedList
- 10. Reversing LinkedList Second Half
- Example: Reversing Second Half of LinkedList
Using Cyclic Sort Pattern
- 1. Understanding Cyclic Sort Technique
- Example: Basic Cyclic Sort Implementation
- 2. Finding Missing Number in Range
- Example: Finding Missing Number
- 3. Finding All Missing Numbers
- Example: Finding Missing Number in Array
- 4. Finding Duplicate Number in Range
- Example: Finding Duplicate Number in Range
- 5. Finding All Duplicates in Array
- Example: Finding All Duplicates in Array
- 6. Finding Corrupt Pair
- Example: Finding Corrupt Pair
- 7. Finding First K Missing Positive Numbers
- Example: Finding First K Missing Positive Numbers
- 8. Finding First Missing Positive Number
- Example: Finding First Missing Positive
- 9. Sorting Array In-Place with Cyclic Sort
- Example: Sorting Array with Cyclic Sort
- 10. Finding Disappeared Numbers in Range
- Example: Finding Disappeared Numbers
Implementing Binary Search Variations
- 1. Understanding Binary Search Template
- Example: Basic Binary Search Implementation
- 2. Searching Insert Position
- Example: Insert Position in Sorted Array
- 3. Finding Square Root
- Example: Finding Square Root Using Binary Search
- 4. Finding Closest Element
- Example: Finding Closest Element
- 5. Finding Peak Element
- Example: Finding Peak Element
- Example: Binary Search for Peak Element
- 6. Finding First and Last Position
- Example: Finding First and Last Position
- Summary of Approach
- 7. Finding K Closest Elements
- Example: Finding K Closest Elements
- 8. Finding Smallest Letter Greater Than Target
- Example: Implementation
- 9. Searching in Rotated Sorted Array
- Example: Searching in Rotated Sorted Array
- 10. Finding Minimum in Rotated Array
- Example: Finding Minimum in Rotated Array
- 11. Searching in 2D Matrix
- Example: Searching in a 2D Matrix
- 12. Finding Single Element in Sorted Array
- Example: Binary Search Implementation
Implementing Modified Binary Search
- 1. Understanding Search Space Reduction
- Example: Finding Peak in Mountain Array
- 2. Finding Minimum Capacity to Ship Packages
- Example: Finding Minimum Capacity
- 3. Finding Smallest Divisor
- Example: Finding Smallest Divisor
- 4. Finding Minimum Eating Speed
- Example: Calculate Minimum Eating Speed
- 5. Finding Minimum Days for Bouquets
- Example: Finding Minimum Days for Bouquets
- 6. Splitting Array with Largest Sum
- Example: Splitting Array to Minimize Largest Sum
- 7. Finding Minimum Time for Tasks
- Example: Finding Minimum Time for Tasks
- 8. Finding Median of Two Sorted Arrays
- Example:
- 9. Finding Kth Element in Sorted Matrix
- Example: Binary Search on Values
- Example: Min-Heap Approach
- 10. Finding Minimum in Rotated Array with Duplicates
- Example: Finding Minimum in Rotated Array with Duplicates
Working with Prefix Sum
- 1. Building Prefix Sum Array
- 2. Computing Range Sum Queries
- Example: Prefix Sum Implementation
- 3. Finding Subarray Sum Equals K
- Example: Using Prefix Sum with Hash Map
- 4. Finding Continuous Subarray Sum
- Example: Prefix Sum with Hash Map
- 5. Finding Product of Array Except Self
- Example: Product of Array Except Self
- 6. Finding Maximum Size Subarray Sum
- Example: Finding Maximum Size Subarray Sum
- 7. Finding Contiguous Array with Equal 0s and 1s
- Example: Finding Subarray with Equal 0s and 1s
- 8. Computing 2D Prefix Sum
- Example: 2D Prefix Sum Construction
- Example: Range Sum Query
- 9. Implementing Range Sum Query 2D
- Example: Range Sum Query 2D Implementation
- 10. Finding Subarray Sums Divisible by K
- Example: Subarray Sums Divisible by K
- Key Points
- 11. Finding Minimum Size Subarray Sum
- Example: Finding Minimum Size Subarray Sum
- 12. Finding Maximum Average Subarray
- Example: Finding Maximum Average Subarray
Using Stack Patterns
- 1. Understanding Stack Applications
- Example: Expression Evaluation (Postfix)
- Example: Balanced Parentheses Check
- 2. Validating Parentheses
- Example: Algorithm Implementation
- 3. Implementing Min Stack
- Example: Min Stack Implementation
- 4. Evaluating Reverse Polish Notation
- Example: Evaluate RPN Expression
- Key Points
- 5. Implementing Basic Calculator
- Example: Full Calculator Implementation
- 6. Finding Next Greater Element
- Example: Stack-based Solution
- 7. Finding Daily Temperatures
- Example:
- Algorithm Steps:
- Time & Space Complexity:
- 8. Finding Largest Rectangle in Histogram
- Example: Calculate Largest Rectangle in Histogram
- 9. Implementing Stack with Queues
- Example: Stack Implementation Using Two Queues
- Example: Stack Implementation Using One Queue
- 10. Decoding Strings
- Decoding String Algorithm Summary
- 11. Simplifying Unix Paths
- Example: Simplifying Unix Paths
- 12. Removing K Digits
- Example: Removing K Digits
Using Monotonic Stack
- 1. Understanding Monotonic Stack Technique
- Example: Finding Next Greater Element
- 2. Finding Next Greater Element I
- Example: Finding Next Greater Element
- 3. Finding Next Greater Element II
- Example: Finding Next Greater Element II
- 4. Finding Next Smaller Element
- Example: Algorithm Implementation
- 5. Finding Previous Greater Element
- Example: Finding Previous Greater Element
- 6. Finding Stock Span
- Example: Calculating Stock Span
- 7. Finding Largest Rectangle Area
- Example: Histogram with Heights [2, 1, 5, 6, 2, 3]
- 8. Finding Maximal Rectangle
- Example: Maximal Rectangle
- 9. Removing Duplicate Letters
- Example: Removing Duplicates
- 10. Finding Sum of Subarray Minimums
- Example: Calculate sum of subarray minimums
- 11. Trapping Rain Water
- Example: Trapping Rain Water
- 12. Finding Maximum Width Ramp
- Example: Finding Maximum Width Ramp
Using Queue Patterns
- 1. Understanding Queue Applications
- Example: BFS Implementation
- 2. Implementing Queue with Stacks
- Example: Queue Implementation Using Two Stacks
- 3. Implementing Circular Queue
- Example: Implementing a Circular Queue in JavaScript
- 4. Implementing Deque
- 5. Implementing Moving Average
- Example: Moving Average Implementation
- 6. Finding Recent Counter
- Example: Recent Counter Implementation
- 7. Implementing Hit Counter
- Example: Basic Hit Counter Implementation
- 8. Solving Dota2 Senate
- Example: Solving Dota2 Senate
- 9. Implementing Design Snake Game
- Example: Basic Snake Game Logic
- Game Loop Steps
- 10. Solving Perfect Squares
- Example:
Using Monotonic Queue
- 1. Understanding Monotonic Queue Technique
- Example: Basic Monotonic Queue Implementation
- Key Characteristics
- 2. Finding Sliding Window Maximum
- Example: Sliding Window Maximum
- Algorithm Summary
- 3. Finding Sliding Window Minimum
- Example: Sliding Window Minimum
- 4. Finding Shortest Subarray with Sum ≥ K
- Example: Finding Shortest Subarray with Sum ≥ K
- 5. Finding Jump Game VI Solution
- Example: Jump Game VI Solution
- 6. Finding Constrained Subset Sum
- Example: Finding Subarray with Sum in Range
- 7. Implementing Moving Average with Window
- Example: Moving Average Implementation
- 8. Finding Continuous Subarrays
- Example: Finding Subarrays with Maximum Value
- 9. Finding Longest Continuous Subarray
- Example: Finding Longest Subarray with Maximum Element
- 10. Optimizing DP Transitions with Queue
- Example: Sliding Window Maximum with Monotonic Queue
- Key Points
Using Hash Table Patterns
- 1. Understanding Hash Table Operations
- Example: Basic Hash Table Operations
- 2. Solving Two Sum Problem
- Example: Two Sum Solution Using Hash Map
- 3. Solving Four Sum Problem
- Example: Two Pointers + Hash Set
- Example: Sorting + Two Pointers
- 4. Checking for Duplicate Elements
- Example: Using Hash Set to Check for Duplicates
- Example: Using Hash Map to Count Occurrences
- 5. Finding Longest Consecutive Sequence
- Example: Finding Longest Consecutive Sequence
- 6. Implementing LRU Cache
- Example: LRU Cache Implementation
- 7. Implementing LFU Cache
- Example: LFU Cache Implementation
- 8. Grouping Shifted Strings
- Example: Grouping Rotated Strings
- 9. Finding Isomorphic Strings
- Example: Check if two strings are isomorphic
- 10. Finding Word Pattern Match
- Example: Word Pattern Matching
- 11. Validating Sudoku Board
- Example: Validating a Sudoku Board
- 12. Finding Intersection of Arrays
- Example: Hash Set Approach
- Example: Two Pointers Approach
Generating Subsets and Permutations
- 1. Understanding Subset Generation Technique
- Example: Recursive Backtracking Implementation
- Example: Bit Manipulation Implementation
- 2. Generating All Subsets
- Example: Recursive Approach
- Example: Iterative Approach
- Example: Bit Manipulation Approach
- 3. Generating Subsets with Duplicates
- Example: Backtracking with Sorting
- Example: Iterative with Set
- 4. Generating All Permutations
- Example: Backtracking Implementation
- Example: Heap's Algorithm Implementation
- 5. Generating Permutations with Duplicates
- Example: Backtracking with Frequency Map
- Example: Sorting + Visited Array
- 6. Generating Combinations
- Example: Recursive Backtracking
- Example: Iterative with Bitmask
- 7. Generating Letter Case Permutations
- Example: Generate letter case permutations
- 8. Generating Balanced Parentheses
- Example: Backtracking Implementation
- 9. Generating Unique BSTs
- Example: Generate All Unique BSTs for Values 1 to 3
- 10. Generating Palindrome Partitions
- Example: Backtracking Approach
- Example: Dynamic Programming Approach
- 11. Generating Word Abbreviations
- Example: Generate Abbreviations for a Word
- 12. Generating N-Queens Solutions
- Example: N-Queens Solution for n=4
Using Backtracking Pattern
- 1. Understanding Backtracking Framework
- Example: N-Queens Problem
- Key Concepts
- 2. Solving N-Queens Problem
- Example: N-Queens Solution
- Solution Approach
- 3. Solving Sudoku Puzzle
- Example: Basic Backtracking Algorithm for Sudoku
- 4. Searching Words in Grid
- Example: Word Search in Grid
- 5. Generating Valid IP Addresses
- Example: Generate Valid IP Addresses from String
- 6. Solving Combination Sum Problems
- Example: Combination Sum I
- Example: Combination Sum II
- Example: Combination Sum III
- 7. Solving Palindrome Partitioning
- Example: Palindrome Partitioning
- 8. Generating Phone Letter Combinations
- Example: Phone Letter Combinations
- 9. Solving Rat in Maze Problem
- Example: Solving Rat in Maze
- 10. Solving Knight's Tour Problem
- Example: Knight's Tour Implementation
- 11. Solving Expression Add Operators
- Example: Expression Add Operators
- 12. Restoring IP Addresses
- Example: Valid IP Address Combinations
Working with String Matching
- 1. Understanding String Matching Algorithms
- Example: KMP Algorithm Implementation
- 2. Validating Palindromes
- Example: Basic Palindrome Check
- Example: Case-Insensitive Palindrome Check
- Example: Palindrome with Spaces and Punctuation
- 3. Checking for Anagrams
- Example: Sorting Approach
- Example: Character Frequency Count
- 4. Grouping Anagrams Together
- Example: Using Sorting to Group Anagrams
- Example: Using Character Counting to Group Anagrams
- 5. Implementing String Compression
- Example: Run-Length Encoding Implementation
- Example: LZ77 Compression
- 6. Finding Longest Palindromic Substring
- Example: Expand Around Centers
- Example: Manacher's Algorithm
- 7. Finding Longest Palindromic Subsequence
- Example: Implementation using Dynamic Programming
- 8. Implementing KMP Algorithm
- Example: KMP Algorithm Implementation in JavaScript
- 9. Implementing Rabin-Karp Algorithm
- Example: Basic Implementation of Rabin-Karp
- 10. Finding Longest Repeating Substring
- Example: Brute Force Approach
- Example: Rolling Hash Approach
- 11. Finding Distinct Subsequences
- Example: Counting Distinct Subsequences
- 12. Implementing Trie for Prefix Matching
- Example: Basic Trie Implementation
- Key Features of Trie
Implementing String Hashing and Rolling Hash
- 1. Understanding Polynomial Hashing
- Example: Polynomial Hashing Implementation
- 2. Implementing Single Hash Function
- Example: Basic Hash Function Implementation
- 3. Implementing Double Hashing
- Example: Double Hashing Implementation in JavaScript
- 4. Calculating Substring Hash
- Example: Rolling Hash for Pattern Matching
- 5. Implementing Rolling Hash Update
- Example: Rolling Hash Update Function
- Key Points
- 6. Solving Longest Common Substring
- Example: Using Rolling Hash for Longest Common Substring
- 7. Finding Repeated Substring
- Example: Rolling Hash for Repeated Substring Detection
- 8. Implementing Pattern Matching
- Example: KMP Algorithm Implementation
- Example: Rabin-Karp Implementation
- 9. Solving Palindrome Hashing
- Example: Check if a string is a palindrome using hashing
- 10. Selecting Hash Parameters
- Example: Selecting Parameters for Rolling Hash
- 11. Handling Hash Collisions
- Example: Chaining Implementation
- Example: Linear Probing
Implementing Suffix-Based Algorithms
- 1. Implementing Suffix Array
- Example: Building Suffix Array
- Example: Searching with Suffix Array
- 2. Building LCP Array
- Example: Building LCP Array from Suffix Array
- 3. Implementing Aho-Corasick Algorithm
- Example: Aho-Corasick Implementation in JavaScript
- 4. Building Failure Links
- Example: Failure Link Construction
- 5. Solving Multiple Pattern Search
- Example: Aho-Corasick Implementation
- 6. Implementing Suffix Tree
- Example: Building a Suffix Tree
- Example: Searching in Suffix Tree
- 7. Finding Longest Repeated Substring
- Example: Suffix Array Approach
- Example: Rolling Hash Approach
- 8. Solving Palindrome Queries
- Example: Check if string is palindrome
- Example: Find longest palindromic substring (Expand Around Centers)
- Example: Manacher's Algorithm (Linear Time)
- 9. Implementing Z-Algorithm
- Example: Z-Algorithm Implementation
- 10. Finding Distinct Substrings
- Example: Suffix Array Implementation
- Example: Rolling Hash for Distinct Substrings
- 11. Solving String Matching Variants
- Example: KMP Algorithm for Exact String Matching
- Example: Wildcard Pattern Matching
Implementing Tree Breadth-First Search
- 1. Understanding Level Order Traversal
- Example: Basic Level Order Traversal
- 2. Implementing Basic BFS
- Example: Basic BFS Implementation
- 3. Traversing Reverse Level Order
- Example: Reverse Level Order Traversal
- 4. Traversing Zigzag Level Order
- Example: Zigzag Traversal
- 5. Finding Level Averages
- Example: Finding Level Averages
- 6. Finding Level Minimum
- Example: Finding Minimum in Level 2
- 7. Finding Level Maximum
- Example: Finding Maximum in Level 2
- 8. Implementing Level Order Successor
- Example: Finding Level Order Successor
- 9. Connecting Level Order Siblings
- Example: Connecting Level Order Siblings
- 10. Finding Right Side View
- Example: Right Side View of Binary Tree
- 11. Finding Boundary Traversal
- Example: Boundary Traversal
- 12. Checking Tree Symmetry Property
- Example: Symmetric Tree Check
Implementing Tree Depth-First Search
- 1. Understanding DFS Traversals
- Example: Tree Node Structure
- 2. Finding All Root-to-Leaf Paths
- Example: Collecting All Root-to-Leaf Paths
- 3. Checking Path Sum
- Example: Path Sum Check
- 4. Finding All Path Sums
- Example: Finding All Path Sums in a Binary Tree
- 5. Finding Path with Maximum Sum
- Example: Maximum Path Sum in Binary Tree
- 6. Finding Path Sequence
- Example: Finding All Root-to-Leaf Paths
- 7. Counting Paths for Sum
- Example: Count Paths with Sum
- 8. Finding Tree Diameter
- Example: Finding Diameter of Binary Tree
- 9. Finding Maximum Path Sum
- Example: Maximum Path Sum in Binary Tree
- 10. Calculating Sum of Path Numbers
- Example: Calculating Path Sum
- 11. Finding Kth Smallest Element
- Example: In-order Traversal
- Algorithm Summary
- 12. Validating Binary Search Tree
- Example: Validating BST
Traversing Graphs with DFS
- 1. Understanding Graph DFS
- Example: Basic DFS Implementation (Recursive)
- Example: DFS with Path Tracking
- 2. Implementing Recursive DFS
- Example: Recursive DFS Implementation
- 3. Implementing Iterative DFS
- Example: Iterative DFS Implementation
- 4. Detecting Cycle in Undirected Graph
- Example: Detecting Cycle in Undirected Graph
- 5. Detecting Cycle in Directed Graph
- Example: Detecting Cycle in Directed Graph
- 6. Finding Connected Components
- Example: Finding Connected Components in Undirected Graph
- 7. Finding Strongly Connected Components
- Example: Kosaraju's Algorithm Implementation
- Example: Tarjan's Algorithm Implementation
- 8. Implementing DFS Path Finding
- Example: Basic DFS Path Finding
- 9. Finding All Paths
- Example: Finding All Paths in a Directed Graph
- 10. Solving Island Problems
- Example: Number of Islands
- Example: Max Area of Island
- 11. Finding Articulation Points
- Example: DFS-based Algorithm to Find Articulation Points
- 12. Validating Bipartite Graph
- Example: Bipartite Validation Using DFS
Traversing Graphs with BFS
- 1. Understanding Graph BFS
- Example: BFS Implementation in JavaScript
- 2. Implementing Level-wise BFS
- Example: BFS Traversal with Level Tracking
- 3. Finding Shortest Path
- Example: BFS Shortest Path in Grid
- 4. Implementing Multi-source BFS
- Example: Multi-source BFS for Shortest Distance
- 5. Solving Rotting Oranges Problem
- Example: Rotting Oranges
- 6. Finding Word Ladder
- Example: Word Ladder BFS Implementation
- 7. Solving Snakes and Ladders
- Example: Solving Snakes and Ladders
- 8. Finding Shortest Bridge
- Example: Finding Shortest Bridge in Grid
- 9. Validating Bipartite Graph
- Example: Bipartite Validation Using BFS
- Key Points
- 10. Finding Minimum Knight Moves
- Example: Knight Moves on 8x8 Board
- 11. Solving Open the Lock Problem
- Example: BFS Implementation
- 12. Finding Bus Routes
- Example: Finding Bus Routes
Implementing Topological Sort
- 1. Understanding Topological Ordering
- Example: Basic Concept
- Steps to Perform Topological Sort
- 2. Implementing Kahn's Algorithm
- Example: Kahn's Algorithm Implementation in JavaScript
- Algorithm Summary
- 3. Implementing DFS-based Topological Sort
- Example: DFS-based Topological Sort
- 4. Detecting Cycle in Directed Graph
- Example: DFS-based Cycle Detection
- Example: Kahn's Algorithm for Cycle Detection
- 5. Finding All Topological Orderings
- Example: Finding All Orderings
- 6. Scheduling Tasks with Prerequisites
- Example: Scheduling Tasks Using Topological Sort
- 7. Finding Minimum Height Trees
- Example: Finding MHT Roots
- Algorithm Summary
- 8. Finding Alien Dictionary Order
- Example: Alien Dictionary Order
- 9. Reconstructing Sequence
- Example: Reconstructing a Build Order
- Key Points
- 10. Finding Valid Build Order
- Example: Finding Valid Build Order
Using Union Find Pattern
- 1. Understanding Union Find Technique
- Example: Basic Union-Find Implementation
- 2. Implementing Find Operation
- Example: Basic Find Implementation
- 3. Implementing Union Operation
- Example: Union Operation in Action
- 4. Detecting Cycle in Undirected Graph
- Example: Cycle Detection in Graph
- Algorithm Summary
- 5. Finding Number of Connected Components
- Example: Counting Connected Components in Graph
- 6. Solving Redundant Connection
- Example: Detecting Redundant Edge
- 7. Implementing Accounts Merge
- Example: Merging Accounts
- 8. Finding Sentence Similarity II
- Example: Sentence Similarity II
- 9. Solving Satisfiability of Equality
- Example: Solving Equality Equations
- 10. Finding Smallest String with Swaps
- Example: Finding Smallest String with Swaps
- 11. Solving Number of Provinces
- Example: Number of Provinces
- 12. Implementing Kruskal's MST
- Example: Kruskal’s MST with Union-Find
Finding Top K Elements
- 1. Understanding Heap-based Selection
- Example: Using Min-Heap to Find Top K Elements
- 2. Finding K Largest Elements
- Example: Using Min-Heap
- Example: Using QuickSelect
- 3. Finding Kth Largest Element
- Example: Using Min-Heap
- Example: Using Quickselect
- 4. Finding K Closest Points
- Example: Max Heap Implementation
- Example: Quickselect Implementation
- 5. Finding Top K Frequent Elements
- Example: Using HashMap + Min-Heap
- Example: Using QuickSelect
- 6. Sorting Array by Frequency
- Example: Using HashMap + Sorting
- Example: Using Min-Heap
- 7. Finding K Closest Numbers
- Example: Two Pointers Approach
- Example: Binary Search + Heap Approach
- 8. Finding Maximum Distinct Elements
- Example: Using Hash Set
- Example: Using Sorting
- 9. Finding Sum of K Elements
- Example: Using Min-Heap
- Example: Using QuickSelect
- 10. Rearranging String K Distance Apart
- Example: Rearranging String
- Key Points
- 11. Scheduling Tasks with Constraints
- Example: Basic Task Scheduling
- 12. Finding Frequency Sort
- Example: Frequency Sort
- Time & Space Complexity
Using Two Heaps Pattern
- 1. Understanding Median Maintenance
- Example: Inserting Elements and Finding Median
- 2. Finding Median from Data Stream
- Example: Inserting Elements and Finding Median
- 3. Finding Sliding Window Median
- Example: Sliding Window Median
- 4. Scheduling Tasks with Cooldown
- Example: Scheduling a Task with Cooldown
- 5. Finding Next Interval
- Example: Finding Next Interval
- 6. Maximizing Capital
- Example: Maximizing Capital
- 7. Finding Running Median
- Example: Inserting Numbers and Finding Median
- 8. Balancing Min and Max Heaps
- Example: Inserting Elements into Heaps
- 9. Managing Priority Tasks with Heaps
- Task Management Workflow
Using K-way Merge Pattern
- 1. Understanding Multi-List Merging
- Example: Merging K Sorted Lists
- 2. Merging K Sorted Lists
- Example: Merging K Sorted Lists
- 3. Finding Kth Smallest in M Sorted Arrays
- Example: Finding 4th smallest element
- Algorithm Summary
- 4. Finding Smallest Range Covering K Lists
- Example: Finding Smallest Range
- 5. Merging K Sorted Arrays
- Example: Merging K Sorted Arrays
- 6. Finding K Pairs with Smallest Sums
- Example: Finding K Pairs with Smallest Sums
- 7. Finding Median in Stream of Lists
- Example: Using Heaps to Find Median
- Example: Merging Lists to Find Median
- 8. Merging Intervals from K Lists
- Example: Merging Intervals from K Lists
- 9. Finding Kth Smallest in Sorted Matrix
- Example: Finding Kth Smallest Element
- 10. Finding Next Smallest Element in K Lists
- Example: Finding Next Smallest Element
Managing Merge Intervals
- 1. Working with Interval Format
- Example: Define Interval Object
- Example: Create Interval Array
- 2. Merging Overlapping Intervals
- Example: Merge Overlapping Intervals
- 3. Inserting New Interval
- Example: Insert Interval
- 4. Finding Interval Intersections
- Example: Finding Intersection of Two Intervals
- 5. Checking Conflicting Appointments
- Example: Check for Conflicting Appointments
- 6. Finding Minimum Meeting Rooms
- Example: Finding Minimum Meeting Rooms
- 7. Finding Employee Free Time
- Example: Find Free Time for Employees
- Algorithm Summary
- 8. Finding Maximum CPU Load
- Example: Calculate Maximum CPU Load
- 9. Removing Covered Intervals
- Example: Identifying Covered Intervals
- 10. Finding Non-overlapping Intervals
- Example: Finding Non-overlapping Intervals
Managing Intervals and Ranges
- 1. Implementing Interval Trees
- Example: Basic Interval Tree Node
- Example: Insert Interval
- Example: Search Overlapping Intervals
- 2. Finding Overlapping Intervals
- Example: Check for Overlapping Intervals
- Example: Merge Overlapping Intervals
- 3. Implementing Range Module
- Example: Basic Range Module Implementation
- 4. Implementing My Calendar
- Example: My Calendar Implementation
- 5. Solving Meeting Rooms III
- Example: Meeting Rooms III
- 6. Finding Data Stream Disjoint Intervals
- Example: Insert Interval
- Example: Merge Overlapping Intervals
- 7. Implementing Count of Range Sum
- Example: Count of Range Sum
- 8. Finding Skyline Problem
- Example: Skyline Calculation
- Algorithm Summary
- 9. Solving Rectangle Area
- Example: Calculating Rectangle Area
- Example: Calculating Rectangle Perimeter
- Example: Calculating Rectangle Diagonal
- 10. Finding Perfect Rectangle
- Example: Valid Perfect Rectangle
- Example: Invalid Perfect Rectangle
- Algorithm Summary
Implementing Dynamic Programming Solutions
- 1. Building DP Foundation
- Example: Fibonacci Sequence
- DP Core Principles
- 2. Solving Climbing Stairs
- Example: Space-Optimized Solution
- 3. Solving Maximum Subarray
- Example: Kadane's Algorithm Implementation
- Example: Brute Force Approach
- 4. Solving House Robber
- Example: House Robber Problem
- 5. Solving 0/1 Knapsack
- Example: 0/1 Knapsack Implementation
- 6. Solving Unbounded Knapsack
- Example: Unbounded Knapsack Solution
- 7. Solving Coin Change
- Example: Coin Change Solution
- 8. Solving Partition Equal Subset Sum
- Example: Partition Equal Subset Sum
- 9. Finding Longest Common Subsequence
- Example: LCS Implementation
- 10. Finding Longest Increasing Subsequence
- Example: Finding LIS using Dynamic Programming
- Example: Optimized LIS using Binary Search
- 11. Solving Edit Distance
- Example: Calculating Edit Distance
- Algorithm Summary
- 12. Solving Word Break
- Example: Word Break Implementation
- 13. Solving Palindrome Partitioning II
- Example: Palindrome Partitioning II
- 14. Solving Egg Drop Problem
- Example: Egg Drop Problem with 2 Eggs and 10 Floors
- 15. Solving Matrix Chain Multiplication
- Example: Matrix Chain Multiplication
- Key Points
Using Greedy Algorithms
- 1. Applying Greedy Choice Property
- Example: Activity Selection Problem
- 2. Solving Activity Selection
- Example: Selecting Non-Overlapping Activities
- Key Points
- 3. Solving Fractional Knapsack
- Example: Solving Fractional Knapsack
- 4. Solving Jump Game
- Example: Jump Game Solution
- 5. Solving Jump Game II
- Example: Jump Game II Solution
- 6. Solving Gas Station
- Example: Gas Station Problem
- 7. Solving Task Scheduler
- Example: Task Scheduler Implementation
- 8. Solving Partition Labels
- Example: Partition Labels
- 9. Solving Meeting Rooms II
- Example 1:
- Example 2:
- 10. Solving Remove K Digits
- Example: Remove K Digits
- 11. Solving Candy Distribution
- Example: Candy Distribution
- 12. Solving Minimum Arrows
- Example: Minimum Arrows to Shoot Balloons
- Algorithm Summary
Implementing Divide and Conquer
- 1. Applying Divide and Conquer Technique
- Example: Merge Sort Implementation
- 2. Implementing Merge Sort
- Example: Merge Sort Implementation in JavaScript
- 3. Implementing Quick Sort
- Example: Quick Sort Implementation
- 4. Finding Maximum Subarray
- Example: Divide and Conquer Implementation
- Example: Kadane's Algorithm Implementation
- Comparison of Approaches
- 5. Implementing Binary Search
- Example: Iterative Binary Search
- Example: Recursive Binary Search
- 6. Solving Closest Pair of Points
- Example: Closest Pair of Points Algorithm
- 7. Implementing Strassen's Matrix Multiplication
- Example: Strassen's Matrix Multiplication Implementation
- 8. Finding Majority Element
- Example: Boyer-Moore Majority Vote Algorithm
- 9. Solving Count of Smaller Numbers
- Example: Using Merge Sort
- 10. Implementing Karatsuba Multiplication
- Example: Karatsuba Multiplication in JavaScript
- 11. Solving Reverse Pairs
- Example: Counting Reverse Pairs
Using Bit Manipulation
- 1. Working with Bitwise Operators
- Example: Checking if a Number is Odd or Even
- Example: Swapping Two Numbers Without Temporary Variable
- Example: Setting a Bit at Position
- Example: Clearing a Bit at Position
- 2. Checking Set Bits
- 3. Setting and Clearing Bits
- Example: Setting and Clearing Bits
- 4. Toggling Bits
- Example: Toggling a Bit
- 5. Finding Single Number
- Example: Find Single Number in Array
- 6. Finding Two Single Numbers
- Example: Finding Two Single Numbers
- 7. Counting Set Bits
- Example: Brian Kernighan's Algorithm
- Example: Built-in Function in Python
- 8. Checking Power of Two
- Example: isPowerOfTwo
- 9. Reversing Bits
- Example: Reversing Bits of a Number
- 10. Finding Missing Number
- Example: XOR Approach
- Example: Mathematical Sum
- 11. Generating Power Set
- Example: Bitmasking Approach
- Example: Recursive Approach
- 12. Solving Bitwise AND Range
- Example: Range AND Calculation
Using Math and Number Theory Patterns
- 1. Implementing Sieve of Eratosthenes
- Example: Finding Primes up to 30
- 2. Solving Prime Factorization
- Example: Trial Division Implementation
- Example: Fermat's Factorization
- 3. Implementing Modular Exponentiation
- Example: Fast Modular Exponentiation
- 4. Implementing Extended Euclidean Algorithm
- Example: Extended Euclidean Algorithm Implementation
- 5. Finding Modular Inverse
- Example: Extended Euclidean Algorithm for Modular Inverse
- Example: Fermat's Little Theorem for Modular Inverse
- 6. Finding Euler's Totient Function
- Example: Calculating φ(12)
- Key Properties of φ(n)
- 7. Solving Linear Diophantine Equations
- Example: Solving ax + by = c
- Solution Steps
- 8. Finding Catalan Numbers
- Example: Computing the 5th Catalan Number
- Example: Using Binomial Coefficients
- 9. Implementing Combinatorics
- Example: Calculating Factorials
- Example: Generating Combinations
- Example: Using Binomial Coefficient
- 10. Solving Inclusion-Exclusion Principle
- Example: Counting Numbers Divisible by 2, 3, or 5
- 11. Implementing Chinese Remainder Theorem
- Example: CRT Implementation in JavaScript
- 12. Implementing Fast Fourier Transform
- Example: Basic FFT Implementation in JavaScript
Managing Matrix Operations
- 1. Implementing Matrix Traversal
- Example: Spiral Matrix Traversal
- Example: Diagonal Matrix Traversal
- 2. Rotating Matrix 90 Degrees
- Example: In-Place 90° Clockwise Rotation
- Example: New Matrix 90° Clockwise Rotation
- 3. Implementing Spiral Matrix Traversal
- Example: Spiral Matrix Traversal
- 4. Setting Matrix Zeros
- 5. Searching in Row-Column Sorted Matrix
- Example: Searching in Row-Column Sorted Matrix
- 6. Finding Diagonal Traverse
- Example: Traverse Matrix Diagonally
- 7. Transposing Matrix
- Example: Transpose a 3x3 Matrix
- 8. Finding Kth Smallest in Sorted Matrix
- Example: Binary Search Approach
- Example: Min-Heap Approach
- 9. Implementing Matrix Multiplication
- Example: Standard Matrix Multiplication
- Example: Strassen's Matrix Multiplication
- 10. Finding Number of Islands
- Example: Counting Islands
- 11. Solving Word Search II
- Example:
- Solution Approach:
- 12. Finding Largest Rectangle
- Example: Find Largest Rectangle in Binary Matrix
Using Difference Array Pattern
- 1. Building Difference Array
- Example: Building Difference Array
- 2. Constructing Difference Array
- Example: Range Update Operations
- 3. Implementing Range Update
- Example: Range Update Implementation
- 4. Computing Final Array
- Example: Building and Using Difference Array
- 5. Solving Range Addition
- Example: Range Addition
- Key Points
- 6. Implementing 2D Difference Array
- Example: 2D Difference Array Implementation
- 7. Applying to Car Pooling
- Example: Car Pooling
- 8. Solving Corporate Flight Bookings
- Example: Corporate Flight Bookings
- 9. Finding Maximum After K Operations
- Example: Range Update Operations
- 10. Optimizing Space Usage
- Example: Difference Array for Range Updates
- Space Optimization Techniques
Using Bitmask DP Pattern
- 1. Compressing State with Bitmasks
- Example: Subset Generation Using Bitmasks
- Example: Counting Set Bits
- 2. Implementing Traveling Salesman Problem
- Example: TSP with 4 Cities
- 3. Solving Assignment Problems
- Example: Minimize Cost to Assign Tasks
- 4. Finding Hamiltonian Path
- Example: Finding Minimum Cost Hamiltonian Path
- 5. Solving Subset Sum with Bitmask
- Example: Subset Sum with Bitmask
- 6. Implementing Set Cover Problem
- Example: Set Cover with Bitmask DP
- 7. Solving Partition Problem
- Example: Equal Sum Partition
- 8. Finding Shortest Hamiltonian Path
- Example: Shortest Hamiltonian Path using Bitmask DP
- 9. Implementing State Transitions
- Example: Subset Generation Using Bitmask
- Example: Counting Subsets with Specific Properties
- 10. Solving Job Assignment
- Example: Assigning Jobs to Workers
- 11. Handling Constraint Satisfaction
- Example: Constraint Satisfaction in Bitmask DP
- 12. Optimizing Memory Usage
- Example: Reducing State Space
- Example: Bitset Optimization
- Memory Optimization Strategies
Implementing Digit DP Pattern
- 1. Applying Digit DP Technique
- Example: Count Numbers with Digit Sum Less Than or Equal to K
- Key Steps in Digit DP
- Workflow for Digit DP Implementation
- 2. Counting Numbers with Properties
- Example: Count Numbers with Sum of Digits Equal to K
- Key Steps in Digit DP Implementation
- 3. Finding Sum of Digits
- Example: Finding Sum of Digits from 1 to 100
- 4. Counting Numbers Without Digit
- Example: Count numbers without digit 2 up to 100
- 5. Finding Numbers Divisible by Sum
- Example: Count numbers in range [1, 100] divisible by sum of digits
- 6. Implementing Tight Bound Handling
- Example: Tight Bound Handling in Digit DP
- Key Points of Tight Bound Handling
- 7. Solving Lucky Numbers
- Example: Count Lucky Numbers in Range [1, 50]
- Example: Digit DP Solution
- 8. Counting Palindromic Numbers
- Example: Count Palindromic Numbers in Range [1, 100]
- 9. Finding Numbers with K Non-Zero Digits
- Example: Count Numbers with Exactly K Non-Zero Digits in Range [1, 100]
- Key Points
- 10. Implementing Leading Zero Handling
- Example: Leading Zero Handling in Digit DP
- 11. Solving Sum of Products
- Example: Sum of Products in Range [1, 10]
- Key Points
- 12. Optimizing State Space
- Example: Optimized Digit DP
Implementing Advanced DP Patterns
- 1. Applying DP on Trees
- Example: Tree Diameter Calculation
- 2. Implementing DP with Bitmasking
- Example: Subset Generation Using Bitmasking
- Example: Travelling Salesman Problem (TSP) with Bitmasking
- 3. Solving Convex Hull Trick
- Example: Minimize cost function
- 4. Implementing Divide and Conquer DP
- Example: Matrix Chain Multiplication
- Key Takeaways
- 5. Solving Knuth Optimization
- Example: Matrix Chain Multiplication
- Key Properties
- 6. Implementing Monotone Queue Optimization
- Example: Sliding Window Maximum Using Monotone Queue
- Key Points
- 7. Solving Slope Trick
- Example: Minimum Cost to Make a String Valid
- 8. Implementing Alien's Optimization
- Example: Alien's Optimization in Coin Change
- 9. Solving Profile DP
- Example: Climbing Stairs
- 10. Implementing Broken Profile DP
- Example: Resource Allocation with Constraints
- 11. Solving SOS DP
- Example: Computing SOS DP
- 12. Implementing Digit DP Optimization
- Example: Count Numbers with Sum of Digits Equal to K
- Key Concepts in Digit DP
- Steps to Implement Digit DP
- Digit DP vs Brute Force
Implementing Probability and Expected Value DP
- 1. Implementing Probability DP
- Example: Expected Value of Dice Roll
- Example: Probability of Coin Toss Sequence
- 2. Solving Dice Throw Problems
- Example: Counting Ways to Get Sum
- Example: Expected Value Calculation
- 3. Calculating Expected Number of Steps
- Example: Expected Steps in a Random Walk
- Example: Geometric Distribution
- 4. Implementing Random Walk Problems
- Example: Simple Random Walk
- Example: Random Walk with Bounds
- Key Concepts in Random Walks
- 5. Solving Gambler's Ruin
- Example: Calculating Probability of Ruin
- Example: Simulating Gambler's Ruin
- Solving Gambler's Ruin
- 6. Finding Expected Value
- Example: Expected Value of Dice Roll
- Example: Expected Value of Two Dice
- 7. Implementing Conditional Probability
- Example: Calculating Conditional Probability
- Key Points
- 8. Solving Card Probability
- Example: Probability of Drawing a Royal Flush
- Example: Expected Value of a Card Draw
- 9. Calculating Expected Path Length
- Example: Expected Path Length in a Graph
- 10. Implementing Monte Carlo Methods
- Example: Simple Monte Carlo Roll Simulation
- Example: Policy Evaluation with Monte Carlo
Implementing Binary Lifting Pattern
- 1. Applying Binary Lifting Technique
- Example: Finding k-th Ancestor
- 2. Building Ancestor Table
- Example: Building Ancestor Table
- Example: Query Ancestor
- 3. Finding Kth Ancestor
- Example: Binary Lifting Setup
- Example: Find Kth Ancestor
- 4. Implementing Lowest Common Ancestor
- Example: LCA Implementation with Binary Lifting
- 5. Preprocessing Tree Structure
- Example: Tree with 5 nodes
- 6. Calculating Level Depths
- Example: Depth Calculation for Binary Tree
- 7. Solving Range Queries on Paths
- Example: Finding LCA using Binary Lifting
- 8. Finding Distance Between Nodes
- Example: Calculating Distance Between Nodes
- 9. Optimizing Space Complexity
- Example: Sparse Table Construction
- 10. Implementing Path Queries
- Example: Path Query Implementation
Implementing Advanced Tree Techniques
- 1. Implementing Centroid Decomposition
- Example: Finding Centroid in a Tree
- Key Steps in Centroid Decomposition
- 2. Implementing Heavy-Light Decomposition
- Example: Basic HLD Setup
- Example: Path Query
- 3. Implementing Link-Cut Tree
- Example: Basic Link-Cut Tree Operations
- Key Features of Link-Cut Trees
- 4. Solving Tree Path Queries
- Example: Path Sum
- Example: Maximum Path Sum
- Path Query Techniques Summary
- 5. Implementing Euler Tour Technique
- Example: Euler Tour Traversal
- Example: Subtree Sum Query
- 6. Finding Lowest Common Ancestor
- Example: Binary Lifting Implementation
- Example: Path to Root Approach
- When to Use Each Method
- 7. Implementing Tree Flattening
- Example: BFS Flattening
- Example: DFS Pre-order Flattening
- 8. Solving Subtree Queries
- Example: Precomputed Subtree Sums
- Example: Range Query on Tree
- 9. Implementing Virtual Tree
- Example: Virtual Tree Node Access
- Key Concepts
- 10. Finding Tree Isomorphism
- Example: Tree Isomorphism Check
- Key Concepts
- 11. Implementing Rerooting Technique
- Example: Rerooting for Subtree Sum Queries
- Key Concepts in Rerooting
Implementing Advanced Graph Algorithms
- 1. Finding Bridges and Articulation Points
- Example: Bridge Detection Using DFS
- Example: Articulation Point Detection Using DFS
- 2. Implementing Tarjan's SCC Algorithm
- Example: Tarjan's SCC Algorithm Implementation
- 3. Solving 2-SAT Problem
- Example: 2-SAT Problem
- Solution Approach
- 4. Implementing Maximum Flow
- Example: Ford-Fulkerson Implementation in JavaScript
- 5. Finding Minimum Cut
- Example: Karger's Algorithm Implementation
- 6. Solving Maximum Bipartite Matching
- Example: Ford-Fulkerson Based Algorithm
- Key Concepts
- 7. Implementing Hungarian Algorithm
- Example: Solving Assignment Problem
- 8. Finding Eulerian Path
- Example: Detecting Eulerian Path in Graph
- Example: Finding Eulerian Path Using Hierholzer's Algorithm
- 9. Implementing Hierholzer's Algorithm
- Example: Finding Eulerian Circuit in a Graph
- 10. Solving Chinese Postman Problem
- Example: Finding Minimum Tour in Directed Graph
- 11. Finding Centroid Decomposition
- Example: Finding Centroid in a Tree
- 12. Implementing Heavy-Light Decomposition
- Example: Heavy-Light Decomposition Setup
- Example: Querying Path Between Two Nodes
Using Game Theory and Minimax
- 1. Implementing Nim Game
- Example: Nim Game Logic
- 2. Calculating Grundy Numbers
- Example: Grundy Number Calculation
- 3. Implementing Sprague-Grundy Theorem
- Example: Calculating Grundy Numbers
- Example: Game Outcome Determination
- 4. Solving Stone Game Variations
- Example: Stone Game III Solution
- 5. Implementing Minimax Algorithm
- Example: Minimax in Tic-Tac-Toe
- 6. Implementing Alpha-Beta Pruning
- Example: Alpha-Beta Pruning in Action
- 7. Solving Bash Game
- Example: Determining Winning Position
- 8. Finding Winning Strategies
- Example: Minimax with Alpha-Beta Pruning
- Winning Strategy Components
- Strategy Comparison
- 9. Implementing Expectiminimax
- Example: Simple Dice Game
- 10. Solving Coin Game
- Example: Coin Game State
- Example: Minimax Algorithm
- 11. Implementing Impartial Games
- Example: Nim Game Strategy
Using Geometry and Computational Geometry
- 1. Implementing Point and Line Structures
- Example: Point and Line Creation
- Example: Distance Between Two Points
- Example: Slope of a Line
- 2. Calculating Cross Product
- Example: Cross Product Calculation
- 3. Calculating Dot Product
- Example: Dot Product Calculation
- 4. Finding Convex Hull
- Example: Graham Scan Implementation
- Example: Convex Hull Points
- 5. Implementing Line Intersection
- Example: Bentley-Ottmann Algorithm
- 6. Solving Closest Pair of Points
- Example: Divide and Conquer Implementation
- 7. Finding Point in Polygon
- Example: Ray Casting Implementation in JavaScript
- 8. Implementing Rotating Calipers
- Example: Finding Diameter of Convex Polygon
- 9. Solving Rectangle Overlap
- Example: Rectangle Overlap Check
- 10. Implementing Line Sweep for Segments
- Example: Basic Line Sweep Algorithm
- 11. Implementing Voronoi Diagram
- Example: Voronoi Diagram Construction using Fortune's Algorithm
Using Matrix Exponentiation Pattern
- 1. Implementing Matrix Exponentiation
- Example: Fibonacci using Matrix Exponentiation
- 2. Solving Fibonacci with Matrices
- Example: Computing Fibonacci Using Matrix Exponentiation
- 3. Implementing Matrix Multiplication
- Example: Matrix Multiplication in JavaScript
- 4. Solving Linear Recurrences
- Example: Fibonacci Using Matrix Exponentiation
- 5. Finding Nth Term
- Example: Computing Fibonacci Using Matrix Exponentiation
- 6. Implementing Binary Exponentiation
- Example: Binary Exponentiation in JavaScript
- 7. Solving Graph Path Counting
- Example: Computing Paths of Length 2
- Key Points
- 8. Finding Catalan Numbers
- Example: Matrix Exponentiation for Catalan Numbers
- 9. Implementing Modulo Operations
- Example: Matrix Exponentiation with Modulo
- 10. Solving Tribonacci Sequence
- Example: Computing Tribonacci Using Matrix Exponentiation
- 11. Optimizing Space Complexity
- Example: Binary Exponentiation with Memoization
Using Segment Tree Patterns
- 1. Implementing Range Sum Queries
- Example: Building and Querying a Segment Tree
- 2. Implementing Range Minimum Queries
- Example: Building and Querying a Segment Tree
- 3. Implementing Range Maximum Queries
- Example: Range Maximum Query Implementation
- 4. Implementing Point Updates
- Example: Point Update Implementation
- 5. Implementing Range Updates
- Example: Range Update Implementation
- 6. Solving Range GCD Queries
- Example: Building and Querying a Segment Tree for GCD
- 7. Implementing Range Assignment
- Example: Range Assignment Implementation
- 8. Solving Count of Elements
- Example: Count Elements in Range
- 9. Implementing Historic Queries
- Example: Range Sum Query with Segment Tree
- 10. Solving 2D Range Queries
- Example: 2D Range Sum Query
- 11. Optimizing Space Usage
- Example: Space-Optimized Segment Tree
- 12. Combining Multiple Operations
- Example: Range Sum and Update
Using Fenwick Tree Patterns
- 1. Implementing Point Update Range Query
- Example: Basic Fenwick Tree Implementation
- Key Points
- 2. Implementing Range Update Point Query
- Example: Implementing Range Update Point Query
- 3. Implementing Range Update Range Query
- Example: Range Update and Query
- 4. Solving Inversion Count
- Example: Counting Inversions Using Fenwick Tree
- Key Points
- 5. Finding Count of Smaller Elements
- Example: Count Smaller Elements
- 6. Implementing 2D Point Update
- Example: 2D Fenwick Tree Point Update
- 7. Implementing 2D Range Query
- Example: 2D Fenwick Tree Implementation
- 8. Solving Order Statistics
- Example: Finding k-th smallest element
- 9. Finding Longest Increasing Subsequence
- Example: Using Fenwick Tree for LIS
- 10. Optimizing Space Complexity
- Example: Space-Optimized Fenwick Tree Implementation
- Space Optimization Techniques
Implementing Sparse Table Pattern
- 1. Building Sparse Table Technique
- Example: Building Sparse Table for Range Minimum Query
- 2. Constructing Sparse Table
- Example: Building a Sparse Table for Range Minimum Query
- 3. Implementing Range Minimum Query
- Example: Sparse Table Implementation
- 4. Implementing Range Maximum Query
- Example: Range Maximum Query Implementation
- 5. Implementing Range GCD Query
- Example: Range GCD Query Implementation
- 6. Handling Non-Overlapping Ranges
- Example: Query Non-Overlapping Ranges
- 7. Calculating Query in Constant Time
- Example: Range Minimum Query (RMQ)
- 8. Preprocessing Table
- Example: Building Sparse Table for Range Minimum Query
- Preprocessing Steps
- 9. Solving Range Bitwise OR
- Example: Range Bitwise OR Query
- 10. Solving Range Bitwise AND
- Example: Range Bitwise AND Query
- 11. Implementing 2D Sparse Table
- Example: 2D Sparse Table for Range Maximum Query
Using Meet in the Middle Pattern
- 1. Applying Meet in the Middle Technique
- Example: Subset Sum Problem
- Key Characteristics
- 2. Solving Subset Sum
- Example: Subset Sum with MITM
- 3. Finding Closest Sum
- Example: Finding Closest Sum
- 4. Implementing Bidirectional Search
- Example: Bidirectional BFS Implementation
- 5. Solving 4Sum Problem
- Example: 4Sum using MITM
- MITM Pattern for 4Sum
- 6. Finding Minimum XOR
- Example: Finding Minimum XOR Using Trie
- 7. Solving Knapsack Variants
- Example: 0/1 Knapsack
- Example: Subset Sum
- 8. Implementing Hash-Based Merging
- Example: Finding Common Elements in Two Arrays
- Example: Merging Sorted Arrays Using Hash Map
- 9. Solving Partition Equal Subset
- Example: Partition Equal Subset Sum
- 10. Optimizing Time Complexity
- Example: Subset Sum Optimization
Implementing Square Root Decomposition
- 1. Implementing Square Root Decomposition
- Example: Basic Implementation
- 2. Dividing Array into Blocks
- Example: Calculating Block Size
- 3. Implementing Range Sum Query
- Example: Square Root Decomposition for Range Sum Query
- 4. Implementing Range Update
- Example: Range Update Implementation
- 5. Implementing Mo's Algorithm
- Example: Implementing Mo's Algorithm
- 6. Solving Range Minimum Query
- Example: Range Minimum Query Implementation
- 7. Implementing Point Update
- Example: Updating an Element
- 8. Optimizing Query Complexity
- Example: Optimized Query Implementation
- 9. Implementing Range Add Query
- Example: Range Add Query Implementation
- 10. Solving Distinct Elements Query
- Example: Counting Distinct Elements in Range
- 11. Handling Dynamic Updates
- Example: Updating and Querying
Implementing Line Sweep Algorithm
- 1. Applying Line Sweep Concept
- Example: Finding Intersections
- 2. Sorting Events
- Example: Sorting Events by X and Y Coordinates
- 3. Solving Rectangle Area Union
- Example: Rectangle Area Union
- Key Steps
- 4. Finding Overlapping Intervals
- Example: Event Processing
- Example: Overlap Detection
- 5. Implementing Skyline Problem
- Example: Skyline Calculation
- Key Steps in Skyline Algorithm
- 6. Solving Closest Pair of Points
- Example: Closest Pair of Points Implementation
- 7. Finding Intersecting Segments
- Example: Basic Segment Intersection Check
- Workflow: Detecting Intersections Using Line Sweep
- 8. Implementing Meeting Rooms
- Example: Schedule Meetings
- 9. Solving Perfect Rectangle
- Example: Check Perfect Rectangle
- 10. Optimizing with Data Structures
- Example: Using Fenwick Tree for Range Sum Queries
- 11. Handling Edge Cases
- Example: Handling Overlapping Events
Using Coordinate Compression
- 1. Applying Coordinate Compression
- Example: Compressing 2D Points
- 2. Collecting Unique Coordinates
- Example: Collecting Unique Coordinates from Points
- 3. Sorting Coordinates
- Example: Sorting 2D Coordinates by X
- Example: Sorting by Distance from Origin
- 4. Creating Compressed Mapping
- Example: Coordinate Compression
- 5. Mapping Original to Compressed
- Example: Coordinate Compression Mapping
- 6. Solving Large Coordinate Problems
- Example: Compressing 2D Coordinates
- Key Benefits of Coordinate Compression
- 7. Applying to 2D Problems
- Example: Point Updates in 2D Grid
- 8. Implementing with Segment Tree
- Example: Coordinate Compression with Segment Tree
- 9. Implementing with Fenwick Tree
- Example: Building and Querying a Fenwick Tree
- 10. Handling Queries
- Example: Range Sum Query
Using Randomized Algorithms
- 1. Implementing Las Vegas Algorithms
- Example: Randomized QuickSort (Las Vegas)
- Key Properties of Las Vegas Algorithms
- 2. Implementing Monte Carlo Algorithms
- Example: Monte Carlo Integration
- Example: Randomized QuickSort
- 3. Implementing Randomized Quick Sort
- Example: Randomized Quick Sort Implementation
- 4. Implementing Randomized Quick Select
- Example: Randomized Quick Select Implementation
- 5. Solving Reservoir Sampling
- Example: Reservoir Sampling with k=1
- Key Points
- 6. Implementing Skip List
- Example: Skip List Implementation in JavaScript
- 7. Solving Bloom Filter
- Example: Bloom Filter Implementation
- 8. Implementing Treap
- Example: Treap Node Structure
- Example: Insert Operation
- Example: Search Operation
- 9. Finding Miller-Rabin Primality
- Example: Miller-Rabin Test Implementation
- Miller-Rabin Test Summary
- 10. Implementing Randomized Min Cut
- Example: Randomized Min Cut Implementation
- 11. Solving Load Balancing
- Example: Random Load Balancing Implementation
- Example: Least Connections Implementation
Implementing Persistent Data Structures
- 1. Applying Persistence Concept
- Example: Immutable List Implementation
- 2. Implementing Persistent Array
- Example: Creating and Updating a Persistent Array
- 3. Implementing Persistent Stack
- Example: Persistent Stack Implementation
- 4. Implementing Persistent Segment Tree
- Example: Building a Persistent Segment Tree
- 5. Implementing Persistent Trie
- Example: Inserting into a Persistent Trie
- Example: Searching in a Persistent Trie
- 6. Solving Range Queries
- Example: Segment Tree for Range Sum Query
- Example: Binary Indexed Tree (Fenwick Tree) for Range Sum
- 7. Implementing Copy-on-Write
- Example: Copy-on-Write in a Tree
- 8. Managing Version History
- Example: Creating and Reverting Snapshots
- 9. Optimizing Space Usage
- Example: Path Copying in a Persistent List
- 10. Applying to Undo Operations
- Example: Undo Stack Implementation
Implementing A* Pathfinding Algorithm
- 1. Applying A* Algorithm
- Example: Basic A* Implementation
- 2. Implementing Manhattan Distance Heuristic
- Example: Manhattan Distance Calculation
- 3. Implementing Euclidean Distance Heuristic
- Example: Calculating Euclidean Distance
- 4. Implementing Admissible Heuristics
- Example: Manhattan Distance Implementation
- Example: Euclidean Distance Implementation
- 5. Implementing Consistent Heuristics
- Example: Manhattan Distance Heuristic
- 6. Managing Open and Closed Sets
- Example: Open and Closed Set Operations
- 7. Implementing Priority Queue
- Example: Using Priority Queue in A* Pathfinding
- 8. Implementing Path Reconstruction
- Example: Reconstructing Path in A* Algorithm
- 9. Implementing Bidirectional A*
- Example: Bidirectional A* Implementation
- 10. Comparing A* vs Dijkstra
- When to Use Which
- 11. Applying to Grid Pathfinding
- Example: Basic Grid Pathfinding
- 12. Optimizing with Jump Point Search
- Example: Basic JPS Node Expansion
- Key Benefits of JPS
Using Advanced DP with Other Patterns
- 1. Implementing DP + Binary Search
- Example: Maximize Profit with Limited Transactions
- Example: Minimize Cost with Constraints
- 2. Solving LIS with Binary Search
- Example: Finding LIS using Binary Search
- 3. Implementing DP + Trie
- Example: Word Break with Trie and DP
- Key Advantages of DP + Trie Combination
- 4. Solving Dictionary Problems
- Example: Anagram Detection Using Dictionary
- Example: Grouping Words by Anagram Class
- 5. Implementing DP + Graph
- Example: Longest Path in DAG with DP
- 6. Solving Shortest Path with Restrictions
- Example: Shortest Path with Resource Limitation
- Key Considerations
- 7. Implementing DP + Segment Tree
- Example: Range Sum Query with DP and Segment Tree
- Example: Maximum Subarray with Segment Tree
- 8. Optimizing DP Transitions
- 9. Implementing DP + Bitmask + Graph
- Example: Traveling Salesman Problem (TSP) with Bitmask
- Key Concepts
- 10. Comparing Hybrid Approaches
- Example: DP + Greedy in Coin Change
Implementing Advanced Greedy Patterns
- 1. Solving Huffman Coding
- Example: Building Huffman Tree
- Example: Encoding with Huffman Codes
- 2. Implementing Interval Scheduling Variants
- Example: Activity Selection
- Example: Weighted Interval Scheduling
- 3. Implementing Fractional Greedy
- Example: Fractional Knapsack
- Example: Activity Selection
- 4. Implementing Greedy Coloring
- Example: Basic Greedy Coloring Algorithm
- 5. Solving Set Cover Approximation
- Example: Set Cover Approximation
- 6. Implementing Vertex Cover Approximation
- Example: Greedy Vertex Cover Approximation
- 7. Calculating Approximation Ratios
- Example: Approximation Ratio for Vertex Cover
- 8. Comparing Greedy vs Optimal
- When to Use Which?
- 9. Implementing Activity Selection Advanced
- Example: Activity Selection with End Time Sorting
- Example: Activity Selection with Priority
- 10. Solving Minimum Platforms Problem
- Example: Minimum Platforms Problem
Optimizing Space Complexity
- 1. Implementing Space-Time Tradeoffs
- Example: Using Hash Maps for Lookup Optimization
- Example: Memoization for Fibonacci
- 2. Using In-Place Algorithms
- Example: Two Pointers for Reversing Array
- Example: Floyd's Cycle Detection
- 3. Implementing Constant Space DP
- Example: Space-Optimized Fibonacci
- 4. Using Bit Manipulation
- Common Bit Manipulation Techniques
- Example: Find Unique Number in Array
- 5. Implementing Two-Variable DP
- Example: Fibonacci with Two Variables
- 6. Using Hash Set vs Array
- Example: Finding Duplicates in Array
- Example: Using Array for Ordered Unique Elements
- When to Use Which
- 7. Implementing Sliding Window
- Example: Maximum Sum Subarray of Size K
- Example: Longest Substring with K Distinct Characters
- 8. Using Deque vs Array
- Example: Deque Operations
- Example: Array Operations
- When to Use Which
- 9. Implementing Generator Functions
- Example: Fibonacci Sequence with Generators
- Example: Generator with Error Handling
- 10. Using Pointer Manipulation
- Example: Two Pointers for Pair Sum
- Example: Fast and Slow Pointers for Cycle Detection
- 11. Implementing Modulo Arithmetic
- Example: Circular Buffer Implementation
- 12. Using Boolean Array Compression
- Example: Bit Packing
- Example: Sparse Boolean Array
Optimizing Time Complexity
- 1. Analyzing Time Complexity Classes
- Example: Comparing Time Complexities
- 2. Using Memoization
- Example: Fibonacci with Memoization
- 3. Implementing Tabulation
- Example: Fibonacci with Tabulation
- Tabulation Advantages
- 4. Using Hash Tables
- Example: Hash Table Usage
- 5. Implementing Binary Search
- Example: Basic Binary Search Implementation
- Example: Recursive Binary Search
- 6. Using Two Pointers
- Example: Two Sum
- Example: Palindrome Check
- 7. Implementing Early Termination
- Example: Early Termination in Linear Search
- 8. Using Sorting Preprocessing
- Example: Two Sum in Sorted Array
- Example: Merge Intervals
- 9. Implementing Greedy Approach
- Example: Activity Selection
- 10. Using Bit Manipulation
- Example: Check if a number is even using bitwise AND
- Example: Swap two numbers without a temporary variable
- Example: Find the single element in an array where every other element appears twice
- 11. Implementing Amortized Analysis
- Example: Dynamic Array Growth
- 12. Using Mathematical Formulas
- Example: Sum of Arithmetic Sequence
- Example: Fibonacci Using Binet's Formula
Handling Edge Cases
- 1. Identifying Edge Case Categories
- Example: Null Input Handling
- 2. Handling Empty Input
- Example: Handling Empty Input in a Loop
- 3. Handling Single Element
- 4. Handling Duplicate Elements
- Example: Set-based Deduplication
- Example: Map-based Counting
- 5. Handling Negative Numbers
- Example: Detecting Negative Numbers in Array
- 6. Handling Integer Overflow
- Example: Overflow Check in Java
- Example: Safe Addition in Go
- 7. Handling Floating Point Precision
- Example: Epsilon Comparison
- Example: Rounding for Display
- Best Practices for Floating Point Precision
- 8. Handling Circular References
- Example: Detecting Circular References in a Tree
- 9. Handling Invalid Input
- Example: Input Validation Function
- 10. Handling Large Input
- Example: Chunking Large Arrays
- 11. Handling Special Characters
- Example: Normalizing Line Endings in Text Processing
- Example: Escaping Special Characters in JSON
- 12. Handling Concurrent Modifications
- Example: Thread-Safe Counter
Comparing Array and Pointer Patterns
- 1. Applying Decision Framework
- When to Use Array vs Pointer Patterns
- Decision Framework Steps
- 2. Comparing Two Pointers vs Sliding Window
- Example: Two Pointers for Pair Sum
- Example: Sliding Window for Max Sum Subarray
- 3. Comparing Fast-Slow Pointers vs Hash Set
- Example: Detecting Cycle in Linked List
- When to Use Which?
- 4. Comparing Cyclic Sort vs Hash Map
- Example: Cyclic Sort
- Example: Hash Map for Frequency Counting
- Comparison Summary
- 5. Comparing Binary Search Variants
- Example: Standard Binary Search Implementation
- Example: Lower Bound Implementation
- Example: Upper Bound Implementation
- Example: Rotated Array Search
- 6. Comparing Prefix Sum vs Difference Array
- Example: Prefix Sum for Range Sum Query
- Example: Difference Array for Range Updates
- Comparison Summary
- 7. Comparing Hash Table vs Two Pointers
- Example: Finding Two Sum Using Hash Table
- Example: Valid Palindrome Using Two Pointers
- When to Choose Which
- 8. Evaluating Array Pattern Tradeoffs
- Example: Performance Comparison
- Tradeoff Summary
Comparing Stack and Queue Patterns
- 1. Comparing Stack vs Monotonic Stack
- Example: Next Greater Element using Stack
- Example: Next Greater Element using Monotonic Stack
- Key Differences Summary
- 2. Comparing Queue vs Monotonic Queue
- Example: Standard Queue Usage
- Example: Monotonic Queue for Sliding Window Maximum
- 3. Comparing Recursion vs Iteration
- Example: Factorial Calculation
- When to Use Which?
- 4. Comparing Recursive vs Iterative DFS
- Example: Recursive DFS
- Example: Iterative DFS
- When to Use Which
- 5. Evaluating Stack-Queue Pattern Selection
- Stack vs Queue: When to Choose Which
- Decision Workflow for Pattern Selection
- Key Considerations
Comparing Search and Traversal Patterns
- 1. Comparing Backtracking vs DP
- Example: Solving N-Queens with Backtracking
- Example: Coin Change with DP
- Key Differences Summary
- 2. Comparing Backtracking vs Greedy
- Example: Solving Subset Sum with Backtracking
- Example: Activity Selection with Greedy
- Key Differences
- 3. Comparing DP vs Greedy
- Example: Coin Change Problem
- When to Use Which?
- 4. Comparing Memoization vs Tabulation
- Example: Fibonacci Comparison
- When to Use Which?
- 5. Comparing DFS vs BFS
- Example: DFS Implementation
- Example: BFS Implementation
- Key Differences Summary
- 6. Comparing Tree DFS Variants
- Key Differences Summary
- 7. Comparing Graph DFS vs BFS
- Example: DFS Implementation in JavaScript
- Example: BFS Implementation in JavaScript
- Key Differences Summary
- 8. Comparing Topological Sort Methods
- Example: Kahn's Algorithm Implementation
- Example: DFS-based Implementation
- Key Differences
- 9. Selecting Search Strategy
- Example: Choosing Binary Search
Comparing Advanced Data Structure Patterns
- 1. Comparing Union Find vs DFS
- Example: Union Find Implementation
- Example: DFS Implementation
- Key Differences Summary
- 2. Comparing Union Find Optimizations
- Example: Union Find with Path Compression
- 3. Comparing Heap vs Sorting
- Example: Using Heap for Priority Queue
- Example: Sorting with Built-in Method
- When to Use Heap vs Sorting
- 4. Comparing Min Heap vs Max Heap
- Example: Min Heap Operations
- Example: Max Heap Operations
- Comparison Summary
- 5. Comparing Two Heaps vs Sorting
- Example: Finding Median Using Two Heaps
- Example: Sorting for Median
- When to Use Each Approach
- 6. Comparing K-way Merge vs Sorting
- Example: K-way Merge
- Example: Sorting
- Key Differences Summary
- 7. Comparing Merge Intervals vs Sweep Line
- Overview
- Example: Merge Intervals
- Example: Sweep Line for Event Processing
- Key Differences
- 8. Comparing Segment Tree vs Fenwick Tree
- Example: Segment Tree for Range Sum Query
- Example: Fenwick Tree for Prefix Sum
- Summary of Key Differences
- 9. Comparing Segment Tree vs Sparse Table
- Example: Range Minimum Query (RMQ)
- Example: Sparse Table for RMQ
- Comparison Summary
- 10. Comparing Lazy Propagation vs Immediate Updates
- Example: Lazy Propagation in Segment Tree
- Example: Immediate Update in a Binary Search Tree
- Summary of Key Differences
- 11. Comparing Square Root Decomposition vs Segment Tree
- Example: Range Sum Query
- When to Use Which?
- 12. Evaluating Data Structure Selection
- Example: Choosing Between Hash Maps and Trees
- Comparison: Hash Maps vs Trees
Comparing Dynamic Programming Variants
- 1. Comparing Standard DP vs Bitmask DP
- Example: Standard DP - Fibonacci
- Example: Bitmask DP - TSP
- 2. Comparing Standard DP vs Digit DP
- Example: Count Numbers with Digit Sum Equal to K
- 3. Comparing Linear DP vs Tree DP
- Example: Linear DP - Fibonacci
- Example: Tree DP - Max Path Sum
- Key Differences
- 4. Comparing Binary Lifting vs Naive Approach
- Example: Binary Lifting Implementation
- Example: Naive Approach Implementation
- Comparison Summary
- 5. Evaluating DP Pattern Selection
- Example: Choosing Between Approaches
- Selection Criteria
Comparing String Algorithm Patterns
- 1. Comparing String Matching Algorithms
- Example: KMP Algorithm Implementation
- Example: Rabin-Karp Implementation
- When to Use Which Algorithm
- 2. Comparing String Hashing vs Trie
- Example: String Hashing
- Example: Trie
- Summary of Key Differences
- 3. Comparing Suffix Array vs Suffix Tree
- Example: Suffix Array Construction
- Example: Suffix Tree Construction
- Key Differences Summary
- 4. Comparing Rolling Hash vs Brute Force
- Example: Rolling Hash Implementation
- Example: Brute Force Implementation
- Summary of Comparison
- 5. Selecting String Algorithm Strategy
- String Algorithm Strategy Selection
- Example: Using KMP for Exact Matching
Comparing Mathematical Patterns
- 1. Comparing Bit Manipulation vs Arithmetic
- Example: Bitwise multiplication by 2
- Example: Check if number is even using bit manipulation
- 2. Comparing Bitwise Operations vs Set Operations
- Example: Bitwise vs Set Operations
- Example: Left Shift Operation
- 3. Comparing Math Formula vs Iteration
- Example: Sum of First N Natural Numbers
- Formula vs Iteration Trade-offs
- 4. Comparing Matrix Exponentiation vs Iteration
- Example: Matrix Exponentiation for Fibonacci
- Example: Iterative Approach for Fibonacci
- Comparison Summary
- 5. Evaluating Mathematical Approach
- Example: Evaluating Time Complexity
Comparing Advanced Algorithm Patterns
- 1. Comparing Meet in Middle vs Brute Force
- Example: Subset Sum Problem
- Example: Brute Force Approach
- Comparison Summary
- 2. Comparing Line Sweep vs Nested Loops
- Example: Finding Overlapping Intervals
- Comparison Summary
- 3. Comparing Coordinate Compression vs Direct Indexing
- Example: Coordinate Compression
- Example: Direct Indexing
- Summary of Differences
- 4. Comparing Randomized vs Deterministic
- Key Differences
- Example: Randomized Quick Sort
- Example: Deterministic Quick Sort
- 5. Comparing Persistent vs Ephemeral Structures
- Example: Persistent vs Ephemeral
- 6. Comparing A* vs Dijkstra
- Example: A* Pathfinding
- Example: Dijkstra's Algorithm
- Key Differences Summary
- 7. Comparing Bellman-Ford vs Dijkstra
- Example: Bellman-Ford Algorithm
- Example: Dijkstra's Algorithm
- 8. Comparing Floyd-Warshall vs Dijkstra
- Example: Floyd-Warshall Implementation
- Example: Dijkstra Implementation
- When to Use Which
- 9. Comparing Greedy Approximation vs Exact
- Use Cases
- Example: Activity Selection (Greedy vs Exact)
- Summary of Trade-offs
- 10. Selecting Advanced Pattern Strategy
- Strategy Selection Criteria
- Decision Tree for Pattern Selection
- Quick Reference: When to Use Which Pattern
Evaluating Pattern Selection Criteria
- 1. Evaluating Time-Space Tradeoffs
- Example: Time-Space Tradeoff Analysis
- Key Considerations
- 2. Determining When to Combine Patterns
- Example: Sequential Composition in Data Processing
- Comparison: Pattern Combination Approaches
- Guidelines for Combining Patterns
- 3. Selecting Based on Input Size
- Example: Choosing Pattern Based on Input Size
- 4. Selecting Based on Time Limits
- Example: Time Complexity Comparison
- Time Complexity Guidelines
- 5. Selecting Based on Space Limits
- Example: Space Complexity Comparison
- 6. Selecting Simpler Pattern When Sufficient
- Example: Choosing Linear Search Over Binary Search
- Decision Criteria
- 7. Evaluating Pattern Composability
- Example: Strategy + Observer Composability
- 8. Adapting Patterns to Constraints
- Example: Adapting to Time Complexity Constraint
- 9. Optimizing Pattern Selection
- Example: Selecting Patterns Based on Complexity Metrics
- Optimization Strategies
- Selection Workflow
Recognizing Array and Pointer Pattern Signals
- 1. Analyzing Problem Description
- Example: Two Sum Problem
- 2. Evaluating Input Constraints
- Example: Detecting Sorted Input
- Example: Using Set for Unique Elements
- 3. Identifying Data Structure Type
- Example: Detecting Array vs Linked List
- 4. Recognizing Sorted Array Signal
- Example: Detecting Sorted Array
- 5. Recognizing Pair/Triplet Sum Signal
- 6. Recognizing Contiguous Subarray/Substring Signal
- Example: Sliding Window for Maximum Sum Subarray
- Example: Longest Substring Without Repeating Characters
- 7. Recognizing Linked List + Cycle Signal
- Example: Detecting Cycle in Linked List
- 8. Recognizing Missing/Duplicate in Range Signal
- Example: Finding Missing Number in Range
- Example: Detecting Duplicate in Range
- 9. Recognizing Monotonic Function Signal
- Example: Detecting Monotonic Function
Recognizing Stack and Queue Pattern Signals
- 1. Recognizing Next Greater/Smaller Signal
- Example: Next Greater Element
- Example: Next Smaller Element
- Key Indicators for Stack Usage
- 2. Recognizing Sliding Window Maximum Signal
- Example: Sliding Window Maximum
- 3. Recognizing Range Sum Queries Signal
- Example: Range Sum Query with Segment Tree
- 4. Recognizing Range Update Queries Signal
- Example: Range Update with Segment Tree
- Key Indicators of Range Update Signals
- 5. Recognizing Frequency/Count/Grouping Signal
- Example: Grouping by Frequency
- 6. Recognizing Valid Parentheses/Brackets Signal
- Example: Valid Parentheses Check
Recognizing Heap and Sorting Pattern Signals
- 1. Recognizing Top K Elements Signal
- Example: Find Top 3 Scores in a List
- Example: Using Min-Heap for Efficient Top K
- 2. Recognizing Median Signal
- Example: Finding Median in Sorted Array
- Example: Median in Sliding Window
- 3. Recognizing K Sorted Lists/Arrays Signal
- Example: Merging K Sorted Lists
- 4. Recognizing Intervals/Scheduling Signal
- Example: Merging Overlapping Intervals
- Example: Counting Active Intervals
Recognizing Backtracking and DP Signals
- 1. Recognizing Generate All Solutions Signal
- Example: Generate All Valid Parentheses
- 2. Recognizing Count Solutions or Optimize Signal
- Example: Counting Valid Parentheses
- Example: Minimum Path Sum
- 3. Recognizing Optimal Substructure Signal
- Example: Fibonacci Sequence
- 4. Recognizing Overlapping Subproblems Signal
- Example: Fibonacci Sequence Analysis
- Key Indicators of Overlapping Subproblems
- 5. Recognizing Greedy Choice Property Signal
- Example: Activity Selection
- Key Indicators of Greedy Approach
- 6. Recognizing Subset Sum/Partition Signal
- Example: Subset Sum Problem
- Key Indicators for Subset Sum/Partition
- 7. Recognizing 0/1 Knapsack Signal
- Example: 0/1 Knapsack
- 8. Recognizing Matrix Chain Multiplication Signal
- Example: Matrix Chain Multiplication Signal
Recognizing Tree Pattern Signals
- 1. Recognizing Level-Order Traversal Signal
- Example: Level-Order Traversal Using Queue
- 2. Recognizing Path/Subtree Property Signal
- Example: Path Sum in Binary Tree
- Example: Subtree Sum in Binary Tree
- 3. Recognizing Tree Diameter/Height Signal
- Example: Calculating Tree Diameter
- Example: Calculating Tree Height
- 4. Recognizing Lowest Common Ancestor Signal
- Example: Finding LCA in Binary Tree
Recognizing Graph Pattern Signals
- 1. Recognizing Connected Components Signal
- 2. Recognizing Cycle Detection Signal
- Example: Detecting Cycle in Directed Graph
- 3. Recognizing Shortest Path Signal
- Example: Finding Shortest Path Using Dijkstra's Algorithm
- 4. Recognizing Dependency/Prerequisites Signal
- Example: Detecting Sequential Dependencies
- Key Takeaways
- 5. Recognizing Dynamic Connectivity Signal
- Example: Detecting Component Merges
- 6. Recognizing Spanning Tree Signal
- Example: Detecting Spanning Tree Signal
- 7. Recognizing Network Flow Signal
- Example: Detecting Flow Conservation in a Network
- 8. Recognizing Bipartite Matching Signal
- Example: Bipartite Graph Detection
- Key Indicators of Bipartite Matching Signal
Recognizing String Pattern Signals
- 1. Recognizing Pattern Matching Signal
- Example: Using Wildcard Match
- Example: Substring Search
- 2. Recognizing Palindrome Signal
- Example: Two Pointers Approach
- 3. Recognizing Anagram/Permutation Signal
- Example: Check if two strings are anagrams
- Example: Find all anagrams in a string
- 4. Recognizing Longest Common Subsequence Signal
- Example: Finding LCS in Two Strings
- 5. Recognizing Longest Increasing Subsequence Signal
- Example: Finding LIS in an Array
Recognizing Advanced Pattern Signals
- 1. Recognizing Bitmask in Constraints Signal
- Example: Using Bitmask for State Tracking
- 2. Recognizing Digit Constraints Signal
- Example: Finding 3-digit numbers with unique digits
- 3. Recognizing Large Numbers Signal
- Example: Handling Large Numbers in Algorithms
- 4. Recognizing Exponential Growth Signal
- Example: Exponential Memory Growth
- 5. Recognizing Geometric Points/Lines Signal
- Example: Identifying Line Segments in 2D Space
- 6. Recognizing Large Coordinate Range Signal
- Example: Detecting Large Coordinate Range
- Key Considerations
- 7. Recognizing Rotate/Transpose Matrix Signal
- 8. Recognizing Sparse Matrix Signal
- Example: Detecting Sparse Matrix Pattern
Recognizing Query Pattern Signals
- 1. Recognizing Multiple Queries Signal
- Example: Identifying Multiple Queries Signal in a System
- 2. Recognizing Updates + Queries Signal
- Example: Update and Query in Sequence
- 3. Recognizing Static Range Queries Signal
- Example: Range Sum Query
- 4. Recognizing Probability/Expected Value Signal
- Example: Expected Value in Game of Chance
- Key Concepts
- 5. Recognizing Game with Optimal Play Signal
- Example: Tic-Tac-Toe as a Game with Optimal Play Signal
- Key Indicators of Optimal Play in Games
Applying Pattern Recognition Systematically
- 1. Recognizing Common Problem Families
- Example: Identifying Array Traversal Pattern
- 2. Extracting Keywords from Problem
- Example: Problem Analysis
- 3. Building Problem-Pattern Association
- Example: Using Two Pointers for Subarray Sum
- Pattern Recognition Summary
- 4. Developing Instant Recognition
- Example: Two Pointers for Two Sum
- Example: Sliding Window for Maximum Subarray
- Workflow for Pattern Recognition Development
- Key Takeaways
- 5. Using Constraint Clues
- Example: Choosing Algorithm Based on Input Size
- 6. Combining Multiple Signals
- Example: Signal Aggregation with Weighted Average
- Example: Signal Aggregation with Majority Voting
- Signal Combination Strategies
- 7. Applying Systematic Problem-Solving Approach
- Systematic Problem-Solving Framework
- Example: Solving a Classic Problem