General Strategies
Patterns
Recursive paradigms enable the systematic decomposition of problems into isomorphic subsegments, providing robust intuition for algorithmic design. Nonetheless, naive recursion frequently incurs high computational overhead from overlapping evaluations. Dynamic programming mitigates this drawback via memoization and tabulation, storing intermediate states to optimize retrieval and fundamentally enhance overall computational efficiency.
Find Nth Fibonacci number
[Recursion] [Memoization] [Tabulation]
Find Nth Tribonacci number
[Recursion] [Memoization] [Tabulation]
Find Binomial coefficient
[Recursion] [Memoization] [Tabulation]
Find Nth Catalan Number
[Recursion] [Memoization] [Tabulation]
Find all subsequence combinations of a string
[Recursion] [Memoization] [Tabulation]
Pascal's Triangle
[Recursion] [Memoization] [Tabulation]
Find all distinct subset sums of an array
[Recursion] [Memoization] [Tabulation]
Number of unique BST with N keys
[Recursion] [Memoization] [Tabulation]
Count number of derangements
[Recursion] [Memoization] [Tabulation]
Find number of permutation with K inversions
[Recursion] [Memoization] [Tabulation]
Find number of ways paint a fence with n posts and k colors
[Recursion] [Memoization] [Tabulation]
Print maximum number of A’s using given four keys
[Recursion] [Memoization] [Tabulation]
Climbing stairs
[Recursion] [Memoization] [Tabulation]
Climbing stairs with 3 moves
[Recursion] [Memoization] [Tabulation]
Maximize number segments of cutted in length x, y and z
[Recursion] [Memoization] [Tabulation]
Arrange balls
[Recursion] [Memoization] [Tabulation]
Stacking box
[Recursion] [Memoization] [Tabulation]
Find minimum of jumps to reach end
[Recursion] [Memoization] [Tabulation]
Weighted interval job scheduling
[Recursion] [Memoization] [Tabulation]
Unbounded knapsack
[Recursion] [Memoization] [Tabulation]
0/1 Knapsack problem
[Recursion] [Memoization] [Tabulation]
Find number of way to make coin change
[Recursion] [Memoization] [Tabulation]
Find minimum coins to make change
[Recursion] [Memoization] [Tabulation]
Subset sum
[Recursion] [Memoization] [Tabulation]
Partition a set into two subsets of equal sum
[Recursion] [Memoization] [Tabulation]
Maximize total tips
[Recursion] [Memoization] [Tabulation]
House robber
[Recursion] [Memoization] [Tabulation]
Find longest increasing subsequence (LIS)
[Recursion] [Memoization] [Tabulation]
Subsequence with difference of 1
[Recursion] [Memoization] [Tabulation]
Longest palindromic subsequence (LPS)
[Recursion] [Memoization] [Tabulation]
Minimum insertions to form a palindrome
[Recursion] [Memoization] [Tabulation]
Find the minimum number of edits
[Recursion] [Memoization] [Tabulation]
Find longest common substring
[Recursion] [Memoization] [Tabulation]
Find longest common subsequence (LCS)
[Recursion] [Memoization] [Tabulation]
Longest common increasing subsequence (LCS + LIS)
[Recursion] [Memoization] [Tabulation]
Word break
[Recursion] [Memoization] [Tabulation]
Count unique paths in matrix from top left to bottom right
[Recursion] [Memoization] [Tabulation]
Min cost path
[Recursion] [Memoization] [Tabulation]
Maximum size of square sub-matrix with all 1s
[Recursion] [Memoization] [Tabulation]
Regular expression wildcard pattern matching
[Recursion] [Memoization] [Tabulation]
Backtracking builds solutions incrementally by exploring options recursively. For optimization problems, Branch and Bound enhances this approach by evaluating each path with a mathematical limit. If a branch cannot possibly outperform the current best solution, the algorithm instantly prunes it to save computational effort.
A greedy algorithm is a problem-solving technique that chooses the best option at each step, with the goal of finding a globally optimal solution. Greedy algorithms are simple and easy to implement, but they don't always produce the best solution.
A "number algorithm" generally performs mathematical operations on numbers. The core of a number algorithm involves basic mathematical operations like addition, subtraction, multiplication, and division, often combined in complex ways depending on the problem.
A string algorithm, also called a string matching algorithm, generally searching for occurrences of a "pattern" within a "text" by comparing characters at each position and shifting the pattern along the text until a match is found.
An array algorithm works by utilizing the structure of an array to efficiently access and manipulate data using indices.
Most matrix algorithms use nested loops to iterate through the rows and columns of the matrices, performing the necessary calculations for each element of the resulting matrix
A graph algorithm works by traversing the nodes and edges of a graph, following the connections between them to solve a specific problem, like finding the shortest path between two nodes, identifying connected components, or detecting cycles, by exploring the graph step-by-step based on a set of rules, often using techniques like Depth-First Search (DFS) or Breadth-First Search (BFS) to visit each node in a structured order.
Sorting algorithms move elements in a list into a specific order. They work by comparing elements to determine their order, and then moving them into a new order.
Search algorithms work by analyzing a user's query and finding the most relevant results.