## Monday, November 18, 2013

### How to answer algorithmic programming interview questions

Most technical programming interviews have at least one or more programming whiteboard exercise. These generally include questions like
1. Write an algorithm to reverse a linked list.
OR
2. Write a function to sort a binary tree.
OR
3. Write an algorithm to remove duplicates and sort an arbitrary long input string comprised of single digit numbers.

Almost all of such questions require you to explain your thinking on whiteboard and then design and explain your algorithm or function on the whiteboard in real time. So how do you answer algorithmic questions and make sure that your thinking and direction covers various different aspects that an interviewer is looking for.

Here is one such list that you can keep at the back of your mind when attempting to solve such questions. Some of them may not be valid for some questions, but you should try to model your answer around these tenets.

Understand the question: Make sure you repeat the question. The goal is to understand exactly what the interviewer is looking for in your answer.

Asks clarifying questions to understand what the interviewer is looking for: This is an extension of the first point. You need to ask as many clarification questions as necessary to make sure you are solving the right problem. Most questions will have ambiguity built into them and it is your job to make sure you get them clarified.

Paraphrase the problem: Once you have clearly understood the question, paraphrase it. This helps make sure to the interviewer that you really get the question and the subtleties associated with it.

Call out assumptions: Before and as you are designing the algorithm, make sure to clearly spell out any assumptions that you are making. For example, array index starts at 0, the input is assumed to be made only of numbers, etc. Unsaid assumptions have a bad habit of coming back and biting you later in the exercise.

Articulate at least one or two acceptable input and output: If possible, it is always good to show one or two possible input cases and the desired output from your solution. This helps both you and interviewer to make sure that you are on track to understanding the question.

Define broad solution: Once you have reached this stage, define a broad outline of the solution. No code, just the big ticket steps. For example, Sort the input, find the most common elements, use hashmaps, clean output to remove duplicates, etc.

Define possible other solutions (using hashtags, linked lists, trees, etc): Once you have a broad solution, make sure that you discuss or highlight some alternative approaches. This shows that you can think from a higher perspective and evaluate alternate approaches.

Draw a “manual run” on the whiteboard for input/output: To make sure that your high level solution really works, manually run your input through that to make sure you get the desired output.

Define the high level design: Now is the time to start hashing out your high level design components. Basic functions, data structures, core logic. A lot of your time would be spent here understanding and building your design.

Define the basic algorithm: Here you would be defining the core logic and algorithm for your problem. Make sure you keep talking about your approach.

Discuss time taken by algorithm (1, log(n), etc): Once you have the detailed design in place, discuss the performance characteristics of your solution. Think about minor tweaks or improvements you can do here to improve the performance.

Talk about error handling: This is very important. You should at least talk about different error conditions and how your algorithm would handle it. You can keep the whiteboard clean by not writing every possible case, but make sure you talk about them.

Handle edge cases: Any good algorithm handles edge cases without going through the entire process very fast. Make sure you spend a few minutes thinking and articulating about them.

Testing: Once you think you have the final design ready, force yourself to turn-off your brain and run a couple of inputs through the algorithm. Follow exact steps there and do not use your brain. Basically, be the computer and test. Test. Test again. You will surely uncover a few things here that you might have missed (e.g. <= instead of ==).

Regularly check in to see if the interviewer is on the same page as you: This is a very important step and needs to be done through out the interview. You need to keep the interviewer engaged and focused. Speak clearly, slowly, think aloud and make sure interviewer is following you.

Hopefully this will help you answer algorithmic programming interview questions in a much better cleaner way using a templated approach.

In the next post we will look at such a templated approach to solving design interview questions.

1. Great post.Thanks for one marvelous posting! I enjoyed reading it;The information was very useful.Keep the good work going on!!

ETL Testing training in chennai| SAP MM training in chennai | Informatica training in chennai

1. There are lots of information about hadoop have spread around the web, but this is a unique one according to me. The strategy you have updated here will make me to get to the next level in big data. Thanks for sharing this. Hadoop Training in Chennai | Big Data Training in Chennai

2. The strategy you have posted on this technology hepled me to get into the next level and had lot of informations in it.
salesforce training in chennai | salesforce training institute in chennai

3. The strategy you have posted on this technology hepled me to get into the next level and had lot of informations in it. SAS is one of the basic level programming and is very important in the analysis process.
SAS Training in Chennai | SAS Course in Chennai

4. Thank you for taking the time to provide us with your valuable information. We strive to provide our candidates with excellent care and we take your comments to heart.As always, we appreciate your confidence and trust in us.

Base SAS Training in Chennai

5. Thanks for sharing this informative content which provided me the required information about the latest technology.
Salesforce training in Chennai | Salesforce course in Chennai

6. Excellent content! Thanks for sharing such a useful information.
Ethical Hacking Course in Chennai | Ethical Hacking Training in Chennai

7. Hi, Really your post was very informative. Today's internet era learn Hadoop Online Training will helps you to reach your goal.Selenium Online Training

8. Nice sharing. R is a language and environment for statistical computing and graphics. Want to make a career in R Programming. Learn R Programming Online Training course @ GangBoard. We are the best provider of online training on evergreen technologies.

9. Thank you for this valuable information. I have got some important suggestions from it. Get your business to the next level in simple steps.
ERP Software Solutions in Chennai.

10. Thank you for Sharing. I'm working in brave technologies private limited, We are the best erp software developers based in chennai. erp providers in chennai

11. Nice post. Very interesting to read. Thank you for Sharing.
erp in chennai

12. Wonderful blog! I found it while searching on Yahoo News. Do you have any suggestions on how to get listed in Yahoo News? I’ve been trying for a while but I never seem to get there! Many thanks.
2048 online | tanki online 3

13. Hi, you have given really informative post. Thanks for sharing this post to our vision. Learn Dotnet will helps you to reach your goal. Dot Net Training in Chennai
Android Training in Chennai
Selenium Training in Chennai
Hadoop Training in Chennai

14. The blog or and best that is extremely useful to keep I can share the ideas of the future as this is really what I was looking for, I am very comfortable and pleased to come here. Thank you very much.
animal jam | five nights at freddy's | hotmail login

15. I really enjoyed reading the Post. It was very informative and useful for me.

Oracle PLSQL Training Institutes in Bangalore
Advanced JAVA Training Institute in Bangalore

16. I would like to say thank you for the amazing details and concepts you are sharing in this.
Webseiten Gestaltung Lüdenscheid

17. The strategy you have posted on this technology helped me to get into the next level and had lot of information in it. IOT is one such technology where all the things communicate through the cloud, make decisions, and share information. To know more about the course there are many training institutes who provide complete IOT Training effectively

18. The website is looking bit flashy and it catches the visitors eyes. A design is pretty simple .
office 2010 professional plus key deutsch

19. It's Really A Great Post.
Best IT Servicesin Bangalore

20. Wonderful post..Thank you for updating such a informative blog... VLSI Projects Center in Chennai | VLSI Projects Center in Velachery

21. Thanks for one marvelous posting! I enjoyed reading it; you are a great author. I will make sure to bookmark your blog and may come back someday. I want to encourage that you continue your great posts, have a nice weekend!

Data Science Training in Chennai

22. Well Said, you have provided the right info that will be beneficial to somebody at all time. Thanks for sharing your valuable Ideas to our vision.. Graphic Designing Training with placement in Chennai | Multimedia Training with Placement in Chennai

23. Your website content nice nice and interesting to observe.
Internet Marketing Dienstleistungen

24. Are you looking for best SAP FICO Online Training institute ?

25. Interesting post! This is really helpful for me. I like it! Thanks for sharing!
Mobile application developers in Chennai | PHP developers Chennai

26. Needed to compose you a very little word to thank you yet again regarding the nice suggestions you’ve contributed here.

java training in bangalore

27. Great post.Thanks for one marvelous posting! I enjoyed reading it;The information was very useful.Keep the good work going on!!

ETL Testing training in chennai| SAP MM training in chennai | Informatica training in chennai

28. Needed to compose you a very little word to thank you yet again regarding the nice suggestions you’ve contributed here.
white label website builder

mobile website builder

29. Thanks for sharing the useful information, I hope these are enough to face an interview with an ease...
Best Online Software Training Institute | Big Data Analytics Training

30. Nice post.Thank you so much for sharing.Yiioverflow is a web development company.We have well expert team in Angular JS, Ionic, Yii Framework, Node JS, Laravel, PHP, MySQL, and WordPress.If you want a developer visit.. https://yiioverflow.com/

31. I just want to tell you that Iím all new to blogging and site-building and really loved your web page. Very likely Iím want to bookmark your site . You amazingly have remarkable posts. Thanks a bunch for sharing your blog.
Regards - www.office.com/setup
www.office.com/setup

32. Thanks for splitting your comprehension with us. It’s really useful to me..Embedded Project Center in Chennai | Embedded Project Center in Velachery