After around 5 months of consistent LeetCoding and about 4 months of participating in contests, I've achieved the Knight badge. My next target is to attain the Guardian badge within the next 3 months.
Here's how I reached the Knight Badge:
Using the Neetcode flowchart as my guide for LeetCoding and the Neetcode 150 List.
Month 1:
Focused on Arrays, Two Pointers, Stack, Binary Search, Sliding Window, Intervals, Greedy, Math, and Geometry, Linked List, and Trees.
My goal was to solve almost all Easy and Medium problems in these categories. I was already comfortable with these techniques, so this didn't take too much time. I also recorded the problems that I couldn't solve myself and redid them from time to time.
Month 2:
Dedicated to Backtracking - Easy and Medium. This was the most challenging set of problems for me due to my weakness in recursion.
I almost never solved these problems on my own initially. I spent a lot of time understanding solutions from Neetcode.io, typing out the code line by line, and writing explanations in my notebook. It felt painful at first, but with persistence, it became natural.
Started participating in contests during this month. Initially, I could solve a maximum of 2 questions, which took about 40 minutes each. I was intimidated by others who could solve 4 questions in the time it took me to solve 1.
Managed to reach a contest rating close to 1600 at this point.
I also started doing Daily Questions at this time, but I was okay if I cannot maintain my streak, as I had not covered the syllabus.
Month 3:
Focused on Heap, Graphs, and Advanced Graphs - Easy and Medium. Surprisingly, I didn't find these topics too difficult, probably because of my strong foundation in Trees and Backtracking.
Started consistently solving 2 questions in contests and occasionally 3. Improved my speed but still took around 40 minutes for the first two questions and about 90 minutes for three questions. Reached a rating close to 1675.
Month 4:
Dived into Dynamic Programming - Medium. Despite hearing horror stories about it, I found it manageable. I already knew about Memoization from solving Backtracking problems.
I was able to solve 3 questions on a consistent basis now, and my speed also improved a lot. I was able to solve them in around an hour, and in one of the contest even solved them in 40 mins.
I reached a rating of around 1800.
Month 5:
DP - Longest Common Subsequence
Tries
Bit Manipulation
Hard questions from Neetcode 150
I foudn Bit Manipulation to be the most cumbersome topic. I am still pretty bad at it. If I get a contest problem on it, I just leave it. I still don't know how to get good at it,and somehow I cant find motivation to study it.
I found LCS very challenging, and spent some time understanding the memization and tabulation approaches in it.
I have also been working on solving Hard questions, it is rare(10% of the times) that i am able to solve on my own. I am trying to solve, and learn 3-5 Hard problems a week.
During contest,I am generally able to solve first question in under 2 mins,second in under 15 mins, third in under 50 mins, and so far have only been able to solve the fourth question once.
Also solving Daily questions consistenly and have a 67 Day Streak right now.
Future Approach:
To improve my rating further, I aim to solve 4 questions in more contests, focusing more on Hard Questions.
I also learn from top competitive programmers like LarrryNY for valuable insights.
Here are some tips from my side:
Here are some tips from my side:
2.Get very very strong on basic technuqies: This means when you are writing Sliding Window or Binary Search or BFS, you should be able to write it letters of english alphabet. This can be done by redoing classic problems many times, in a spaced repitition manner.
Do not solve hard problems until you have finished the entire topics. Sometimes Hard Problem is just a bunch of medium problems combined. Once you can solve Medium problems quicjly you become so much better at conencting them together and solving a Hard problem.
Doing more contests itself makes you getting good at contests. There are some contesty things that you only learn by doing contests. Things like Q1, and Q3 being same but one being requiring optimized soltuon, in which case it makes sense to solve Q1 followed by Q3 and then Q2.
Also things like putting print statements can give a TLE, or how to use testcases properly.