FAQs

Is this guide really free?

Absolutely. I have no intentions on making money off of it. The information in this guide was all readily available to me for free when I started. I am simply compiling it into a neater and centralized format that you can learn from. I believe that it takes way more than just reading about a bunch of patterns to get good at technical interviewing. A lot of the benefit that you will be able to extract from this guide comes from your own effort and dedication to working through the problems and identifying the patterns yourself.

When should I tap out?

Generally, I tap out when I have spent about one to two hours on a problem and still have no idea about the intuition or question type to solve the problem. If I have an intuition but cannot implement it within an hour, I also tap out.
After talking to others, there seems to be this fear of tapping out as it might feel like you were not able to reach the solution on your own. However, not everyone can come up with an ingenious 3D DP solution on their first go and that is completely alright. A big part of maximizing your learning is knowing when to stop banging your head against a wall. A crucial next step after tapping out is recording that you had done so and returning to the question after a while to attempt it again.

How long should I spend on each question?

  • Easy: 20 minutes
  • Medium: 40 minutes
  • Hard: 1-2 hours
Feel free to adjust these to your experience. If you are starting out, allocate more time to the easy problems. There are some problems that are a lot easier than their grading. Do not get complacent if you are able to solve them quickly.

Should I spam questions if I am short on time?

Absolutely NOT. Quality > quantity every time. In an ideal scenario, you should not be "cram studying" and should have followed a similar timeline as I did. If you are not able to do so and are rushing for time, then I would recommend focusing on completing at least the first two weeks of the revision questions along with Graph and Tree questions.
You do not need to do every question, just pick the questions that you are able to comfortably solve within the time you have. Focus on understanding every question and its solution before moving on: knowing how to solve 100 questions means nothing if all you did was memorize the code.

How many questions should I be doing everyday?

Ideally, you should be able to complete at least five questions a day (given dedicated practice and time) but I would generally aim to solve at least three as a good starting pace. Throughout the process, focus on developing a deep understanding of the problems and the intuition behind them.

Should I just stick to doing LeetCode dailies to get good?

In general, I think that LeetCode dailies are pointless if you're trying to seriously study for technical interviews. While these problems may follow a weekly topic, they do not expose you to the common interview question patterns as well as targeted practice will.
I recommend prioritizing the study plan over random questions, at least until you are confident in your foundations or have the time to attempt LeetCode dailies.

What language should I be using?

I personally use Python for all my interviews and OAs, but you should use the language you are most comfortable with. Languages like Java and C++ have extensive built-in library support for data structures like heaps and tree sets.
You should focus on getting as comfortable as possible in your chosen language, understanding the tricks that your language have to save time.

Do I need LeetCode Premium?

Not at all, most of the problems within the Study Plan are free and those that require a premium account can be found on other websites like LintCode instead.
The only perk LeetCode premium really gives you is the information about the companies that use a question. However, there are open-source lists of that information circulating online as well.

How should I learn data structure & algorithms if I know nothing?

I went through an algorithm's class the semester before starting my technical interview preparation (I have included a copy of my notes below). However, if you are not in university/have the chance to take an algorithms course, these are some of my recommendations for textbooks:
My personal recommendation if you are very new is to use The Algorithm Design Manual as it provides a gentle yet in-depth introduction to core algorithms and data structures. Introduction to Algorithms is very theoretical and I use it as a supplement to understand certain concepts better.
If you are interested in getting a condensed set of notes about DSA, you are free to use mine from my algorithms class:
CS2040S Finals Cheatsheet.pdf
729KB
PDF

Are there any tools/resources that I can use to simplify my application process?

Absolutely. These were just some of the tools I used:
  1. 1.
    Simplify: quickly filling up applications
  2. 2.
    Google Sheets: tracking my application process
  3. 3.
    Notion: storing my knowledge base from all the preparation
  4. 4.
    Google Calendar/Apple Calendar: tracking my deadlines

Should I study with someone?

A thousand times yes. I was very fortunate to have the support of my friend, Guan Zhou, throughout this process. We were always discussing problems together and checking each other's understanding by explaining our intuitions to one another. I would say that if you are lucky enough to have such a person to bounce ideas off of and discuss problems with, do it and keep doing it till the both of you succeed.