Using Notion to help grind Leetcode
Like many engineers trying to break into FAANG (or MANGA I guess) I am spending a lot of time studying DSA topics and patterns.
As a lot of readers may know already, there are a TON of resources out there to aid with this, essays, books, videos and lists upon lists of material to go through. Sometimes it can be a bit overwhelming.
Sites like https://neetcode.io/ do a fantastic job at categorizing common Leetcode problems, often called the Blind 75, and offer ways of tracking which questions you’ve done.
However I found myself completing questions and then moving on the next without really taking in the solution or committing to memory. This is a downside of me wanting to complete a todo list just for the satisfaction.
The Solution
I’ve always maintained that if you cannot explain a concept clearly and concisely to a non technical person, the chances are you do not fully understand the concept yourself.
What I was missing from my study plan was the act of explaining the solution to the problem. Sure I can use a hashmap to solve it, but why was a hashmap the best practise. Why did that data structure work best over others?
When studying in isolation I was missing the stage where I would explain the solution.
With this in mind I created a Leetcode Question board using Notion and it has been fantastic in helping me lock in the knowledge.
The Setup
Using Notions Kanban board I created a template task which contains the following
Every new task I create in this board will use this template which cuts down a lot of time.
Difficulty
Here I can quickly choose a difficulty associated with the Leetcode question. This allows me to filter the board quickly for a certain level.
Tags
The tags multiselect field lets me select one or more matching tags for the question. This is the most useful I find as it allows me to quickly filter the whole list if I want to focus on a specific area, for example Recursion
How I use it
Practise and Redo
These are questions I am not confident with. They either contain areas I am not too familiar with, or perhaps just questions I don’t quite understand the trick for just yet. This is where all new tasks go.
The majority of these tasks are ones I’ve only done once, or ones where I make too many logical errors, and in some circumstances I am unable to produce an optimal solution within the timeframe of 30–40 minutes.
Kinda Confident
These are questions that I can usually solve first time within 20–30 minutes, I might get a couple of syntax or logical errors but I can still produce an optimal solution.
Very Confident
These are questions I can create optimal solutions for without any hassle. These are usually questions that I understand deeply and can produce clean code and discuss the time complexity confidently.
After I complete a new task I write a small summary on its card with notes for my solution, along with time complexity analysis. I also provide a working solution just in case I need a little hint in the future
At the end of each week I go through the list working from left to right and attempt the questions again. I pick a handful from each column and adjust their places based on whether or not I feel like I have improved or perhaps regressed.
Every time I solve a new question I will update the card containing in depth details on the solution, as well as the time complexities.
Making this into a habit really has helped me solidify knowledge and identify areas where I need to improve.
Let me know your study plans! I’d love to know how others tackle the grind