Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Forget the Hunger Games, here is the dystopian shit right now:

For a medium level leetcode problem here is the time split (for which 20 min are given typically):

1. 4 min => Read/interpret/parse the problem statement

2. 5 min => Formulate the solution.

3. 8 min => Actual code

4. 3 min => Edge cases/review

---------------------

Notes:

* #2 You should think of various algos, DS and lock on to a particular one. If you cannot improve upon the time complexity, you need to make a split decision to either 1) continue to think more or 2) choose the next best and move to #3

* All you can do is steal one min from other phases but at the cost of less time in that phase.

* Think aloud in #2, #3 & #4

* At times even less time is available in case follow-up questions are to be accounted for.

* Code structure & consistency is important. You will be penalized if you write big monoliths.

* Additional conditions when GTFO is triggered: ["Solved the problem in 23 min instead of 20", "Did not think about that 1 scenario even though you took care of most of the important ones", "Solved the DP problem in top-down instead of bottom-up.. loser"]

----------------------

Optimizations:

* #3 should be reduced as much as possible. Choose a lang, know its standard lib by heart. This gives more time for #2

* Think of edge cases while writing code in #3

* At #2 one, you should be able to describe a solution (in your mind) detailed enough to convert into a code e.g Do DFS. Keep a max_val variable. Update max_val on values from left & right sub-tree.

* Develop intuition of doing some #2 work while in #1

-------------------------

What actually happens (or should happen) when someone practices leetcode a lot?

1. Reduce #1 time.

2. #2 => Quick recall of high level patterns already encountered

3. Able to generate multiple solutions.

4. #3 => Translate that pattern as fast as possible. E.g. There is a standard template for BFS, DFS, two pointers, etc

--------------------------

So the entire prep can be divided into two parts:

1. How soon you can zero-in a solution and convert into an outline?

2. How fast you can vomit that into a code?

Once you are comfortable in writing any code fast, you do not have to code every problem in leetcode. I see a problem and only solve it in mind and then check whether the approach was ok or not. I know I can code it fast

Edit: So for me if I have solved 200-300 LC problems, what it really means is I have actually coded in like 40-50 and remaining are just mind puzzles. If I do daily 5 mind solves, I can easily cover 200 in 40 days. I finish this daily routine in 30-45 min. (Hey .. I said this is dystopian)

------------------------

High level view:

* Practice incrementally and not in 2-3 months sprint. Think of it as daily exercise.

* This is just the way it is. May be I will do my part to change the system from inside when I am in an influential position. If you are able to find companies which do not do this shit, really good for you.

* Know that as senior dev, the margin for error is even less. So more important to practice incrementally.

--------------------------

I do not approve of this. Its bad. I am just a guy dealing with the "system".



I went through a interview round recently and concur with your findings. Got me all the way to Google Hiring committee.


Spot on with my experience, but jesus laying it out like this really does show how dystopian it is.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: