Each subpattern solves a specific type of problem. Click on a card to view its template.
Template for: 1D DP & Linear Transitions
Define dp[i] to represent the answer (e.g., max profit, min cost, total ways) for the subproblem up to index i.
Determine how dp[i] relates to previous states. E.g., dp[i] = dp[i-1] + dp[i-2] or dp[i] = max(dp[i-1], dp[i-2] + val).
Initialize the smallest subproblems directly. E.g., dp[0] = 1 (or 0), dp[1] = 1.
If dp[i] only looks back a fixed distance (like 1 or 2 steps), replace the O(N) array with a few variables to achieve O(1) space.
1// 1D DP space-optimized to O(1)2int linearDP(int n)3{4 if (n <= 1) return n;56 int prev2 = 0; // state for dp[i-2]7 int prev1 = 1; // state for dp[i-1]8 int cur = 0; // state for dp[i]910 for (int i = 2; i <= n; i++)11 {12 // Example transition: dp[i] = dp[i-1] + dp[i-2]13 cur = prev1 + prev2;14 prev2 = prev1;15 prev1 = cur;16 }1718 return cur;19}
Sharpen your skills with hand-picked problems.
LeetCode #70
LeetCode #198
LeetCode #746
LeetCode #91
LeetCode #416
LeetCode #322
LeetCode #494
LeetCode #518
LeetCode #1143
LeetCode #72
LeetCode #516
LeetCode #300
LeetCode #309
LeetCode #1048
LeetCode #62
LeetCode #64
LeetCode #221