Mark solving 200 LC problems! -with my routine to categorize and redo problems

Current status after 200 problems:

  • Still stuck on many easy problems
  • Could solve more and more medium problems
  • Only tried few hard problems
  • Attended 5 weekly/bi-weekly contest. Solved two problems for the first time in the most recent contest.
  • Become familiar with tree, linked list, some backtracking and some DP problems
  • Find it difficult when encounter certain stack, array, string and math problems. Still not very familar with many "famous" problems/algorithms.

Also, I'd like to share how I track and categorize the problems. I created different lists to track problems under different categories.
image

To follow up:
I use this list to track problems that I haven't solved. When I encountered a problem that I couldn't solve the first time and if I felt this problem is not a typical problem of certain algorithm, I will put this problem under To follow up list. I will sleep on it to give myself more time thinking about it. This serves two purposes: First, I might firgure out the solution myself. Second, and more importantly, this will leave a stronger impression so that I could better memorize the problem and solution. Just like anything else, the more time you spend and more stories happen between you, the deeper your memory is. I normally will work on this list in the morning, when I have more energy.

one more:
This list is for problems that I solved but need to revisit so it could resinate with me. Depands on how I feel when I revisit, I could keep the question in this list for one more revisit.

What I normally do:

  1. for questions I get stuck, I will do it one more time immediately.
    a. If I solve it myself after some hard time, I will at least write the code once and take the chance to clean up the codes. In most cases, this will get my codes closer to the best solution found in the discussion section.
    b.. If I didn't solve the problem and read the discussion, I will repeat the code independently to make sure I fully understand the solution.
  2. for questions I could easily solve, I will redo the problem the next day.
  3. on the next day, I will try to solve the new questions in the morning, when I normally have more energy. And use the time in the afternoon or when I feel my brain is overheating to repeat the questions I solved the day before.

There is something called forgetting curve. You can refer to this article and plan your review accordingly.
In general, the forgetting curve looks like this:

Retention without repeating:
image
Retention with repeating
image

(the images are from the article mentioned above)

worth redo and Must do:
Thest two lists are for problems that I need to review before going to interviews. I will review problems in the Must do list first. And if I still have time, I will review the worth redo problems. I will include some basic problems, e.g. traversal of binary trees, or typical algorithms,e.g. some dp or backtracking, in thest two lists. Just to refresh my memory before the interviews.

Do similar:
This list is for the algorithms or certain type of problems that I'm still not very familiar with. So I need to do more similar problems.

Of course all mentioned above are really the ideal cases. It's very challenging and requires disciplines to keep solving LC problems itself. But I'm just trying to be as methodical and systematical as possible.

Hope it could be helpful to someone.

Comments (4)