My Way For Problem solving!

To be good at something, it requires you to practice a lot. Problem-solving isn’t any different - it just requires a bit more creativity, patience, and probably a Math degree. (just kidding!).

So you heard about it. Since I am so bad at solving “Problems” (can’t even solve my non-technical ones), I’ve decided to put myself in the thick of things.

The idea of the n days challenge, is consistency!

“Take on only as much as you can do of good deeds, for the best of deeds is that which is done consistently, even if it is little” – Prophet Muhammed - peace be upon him.

I am going to share my little journey day by day, moving from solving easy problems to hard ones, and maybe I am going a step forward.

In n days (30), I am going to solve at least one problem a day (I can do more!).

Don't lose track!
Make a Github repo to keep track of your progress. There are many tools to help keeping track of problems/solutions, one way to go is to use LeetHub.

In the upcoming sections, I will list multiple resources and tools (I do/don’t use) that I think they may help you get your hand dirty!

I suck at problem solving, like really I am bad at this (It’s not my point of strength).

But why ? Why you should be good at problem solving ?, The system is courrpted my friend, almost all companies thinks that a good problem solver is the one to choose even if they(he/she) are trash in the job itself. I am aganist the fact you have to memorize and study stuff only for the interview and you will never use in the job!.
The hate isn't for nothing!

Yes, even though I hate doing problems for getting a job, but it’s undoubtedly the current system (liked or not) to get a job.

  • Problem solving unlocks you mind and creativity for complex problems, adding solutions to problems you never knew how they’re solved.
  • A challenge for yourself, sometimes fun but most of the time pain in the ass.
  • Solving a problem makes you happy, you get some Dopamine at the end.

I will commit on doing problem solving everyday for 30 days (2 Problems/day), I am going to begin with this from leetcode.

I am going to be following 3 aspects:

  1. I can solve any problem, anything comes with practice.
  2. I will commit at least 1-2 hours/day on solving problems for the next 30days, starting from today.
  3. I will never give up on any problem that is put at me, I will ask for help if needed.

Understanding the basic approach by mastering smallest things first, that’s what big tech do!.

For example, you won’t be able to solve a problem that requires DFS without understanding how queues works. You’ve to move your way from smallest building up to the largest things, and if you got stuck just break things into the smallest again.

  1. Understand the problem clearly.

Ask questions. Not all questions might be applicable to your problem, but it is important to ask questions to yourself at this stage before you go ahead trying to solve the problem.

  1. Visualize

That is where a pen and a paper/notebook (or) a white board comes into play. Try to visualize the problem at hand and try to picturize the problem. That is also one of the steps to make sure that you understand the problem clearly.

So you want to start, but you don’t know where to go!. Let me tell you that practicing is the key, but practicing without a good base (basics) and good plan is waste of time.

  • Absolute Beginners

So you have to be really good at the basics (Data Structure and Algorithms).

A great course by Treehouse which is available on freecodecamp.

  • Advanced

Learn Graph Algorithms

A full course from a to z (from a google engineer)

  • Academic (if you prefer book and all theory)

The great MIT courses

I am going to watch the MIT Fall 2011 course + doing this roadmap from NeetCode.

To make the best of the map, you will have to practice everyday, depends on your progress, I would recommend to do at least 2 problems/day with fully understanding the problem and the solution.

There are many websites to do problem solving:

  • Leetcode is the most popular when preparing for interviews.
  • HacerRank is also well known for technical assessments and remote interviews.

For me I like Codingame, it’s really fun:

  • Clash of code : online coding with others.
  • Practice problems.

Don’t hesitate to ask for help if you got stuck but first try to google, for god sake!