Home - Elements of Programming Interviews

Latest Post

20 August 2015

EPI 2.0

The draft version of EPI in Java is ready!

EPI is a community book - its content, quality, and very existence, are a testament to the engagement and enthusiasm of its readers.

In this spirit, we are asking readers to help us by providing feedback on 1-2 chapters on the Java draft.

By acting as a reviewer, you will get

  1. a chance to perfect your interviewing skills,
  2. an early look at the book,
  3. our undying gratitude, and,
  4. a free hardcopy of the book, if you are one of the first 25 reviewers or make great contributions to this review.

If you are interested, please sign up via this Google form. Due to enormous interest, we are no longer signing up reviewers. If you are very keen on participating, please write directly to us - you can use adnan.aziz@gmail.com.

We expect reviewers to spend one to two afternoons going through the chapter, and identify an issue every 1 to 2 pages. The text is very similar to that of the current version - the big difference is in the programs which are now in Java.

The perfect is the enemy of the good - please send us your inputs as soon as you can. (We are hoping to have a substantial amount of feedback by the end of August.)

Issues can be typos, language that is misleading, suboptimum solutions, bad programming practices - in short anything that can improve the quality of the book. Every individual issue you identify should be reported through a Google form, which you can view here.

Here are some examples of issues reported by readers. Note how specific these suggestions are - they have details on where the issue was, what the problem was, what the right wording should be, etc.

  1. Typo: 3rd paragraph, 3rd line: "<0, 0, 2, 2, 3, 3, 5, 5, 7>". According to the input array, it should be "<0, 0, 2, 2, 3, 3, 6, 6, 7>", because when we reach day 6, the max profit is 14 - 8 = 6, not 14 - 9 = 5. This means on the last line of this paragraph, the last two elements in M should be 8 and 6 (instead of 7 and 5).
  2. Comment: Why in problem 6.19 and the variant, we need to assume that n = 2^k? This condition is not really used in current solutions (unless you meant to discuss an alternate solution that uses divide and conquer to rotate the matrix by quarters).
  3. Clarification: Solution 12.14: I feel the parameters in recursive function are confusing. Would it not be better to use two integers to keep track of the number of left parens we need and the number of right parens we need? If the first one is larger than 0, then we can add either left or right paren; otherwise we just add right parens. When both are 0, we save the valid prefix.
  4. Error: Program in Solution 8.4 goes into an infinite loop if there are duplicates entries in the input list. The problem statement should either explicitly rule that out, or you should use a container which supports duplicate entries.
  5. Suggestion: Drop Variant 10.16.1, as it is effectively the same as Problem 10.18.
Many of the best ideas in the book (e.g., the study guide, ninja notation, the C++11 review) came from reader feedback. Please write to us, or post on the discourse forum, with suggestions for improvement.