During 2023, I published 50 tips for effective LeetCode practice.

The tips cover LeetCode practice fundamentals, ideas for fine-tuning the practice process, and how results from learning research can apply to learning algorithms. I think they cover all the ideas you would need to create a detailed, personalized learning plan.

The fundamental tips are organized around a model problem/solution process. The basic process: find a good problem; write a detailed explanation and a code solution for that problem; and use the solution as a model for solving similar problems.

When you’re first learning the model problem/solution process, you might rely too much on applying a solution template to solve problems. That’s fine for Easy and Easy-Medium problems, which are straightforward knowledge tests. But it can break down on harder problems, which require more creativity.

To address this, I suggested in Tip 40 that studying dynamic programming is a way to learn *the process of finding the solution* rather than just *learning the solution*. Unlike other LeetCode algorithm topics, Dynamic Programming is a process for designing algorithms, not a step-by-step process for finding a solution.

So we’ll start the year with an overview of Dynamic Programming, and in the coming weeks, we’ll cover the background required to solve DP problems. Our goal will be to learn enough about Dynamic Programming to solve most Easy and Medium problems, and to practice the tips with specific problems from the LeetCode problem library.

(Image credit: DALLĀ·E 3)