Ask how many questions the will ask
Clarify the questions
- Take time to draw some examples to understand the question
- all different cases, extreme cases
- Ask the range of input
- Duplicate in the data
- Whether I can change/reuse the input
- Ask whether I have used all useful info, whether I missed anything
When Write code
- Extract some functions aggressively
- Otherwise you may repeat a lot of code
- Focus the main part first, define what parameters it needs
- Leave the implementation later, interviewer may just ignore it
- Add To-Check tag where the code may be trick or error prone
- < or <=, len or len-1;
- What states, variables we need
- How do we change them
- Leave some spaces (where you think you may need add some code later, and if the white board is big)
Recheck the code carefully
- First focus on the main logic, error-prone part
- Also check all code
- Use different (simple) use cases to find the problem in the code/algorithm
Compare different approaches
- Always think whether there are better approaches (and say it)
- The different approaches may be easier to code or have better runtime (or space) complexity
- When you think you can implement it different ways or have different approaches, make sure it works and you choose the one that’s easier to implement
- Sometimes, the other approach may be not work
Communication
- Le the interviewer your thinking process, different approaches you are trying
What data structures to use:
- Stack
- PriorityQueue
- Examples: LeetCode 767 - Reorganize String
;if (--mc1.count > 0) pq;if (--mc2.count > 0) pq; - TreeMap, TreeSet\
- Use it when need keep some order
- Need (binary) search the key
- Examples: Interval
Interval
- TreeMap, sort by start or end