You see it's much easier than you think there exists a limit set of rules you should apply to most of the programming interview questions which involves algorithms and data structures. I have prepared a summary of them for you, just read below and get your tips for today.
By brute forcing you get to be familiarize with the problem better. A common theme for brute forcing means you are going to have a for loop inside a foor loop something like the below, so it's great to get familiarize with common bruteforcing snippets, example:
// Brute force find all continuous subsequences.
for (int startIndex = 0; startIndex < arr.length; startIndex++) {
for (int Index = 0; endIndex < arr.length; endIndex++) {
for (int i = startIndex; i++; i < endIndex) {
System.out.println(arr[i]); time complexity O(n^3) as we have loops nest.
}
}
}
Add space, maybe with hashmap
No idea how to brute force? imagine you have more memory space, use an additional hashmap to help you. Sometimes the answer even relies on that on additional space, if you could solve it this way, again, say the time and space complexity and ask if to reduce the space complexity, if yes continue with next steps.
Can you massage the input?
Sometimes if you just sort the input or apply a transformation to it, the problem is easily solved, so try to sort it at first, see if it helps. (this might not be the final answer but it can take you a step further).
Is the problem easy for one item of input? 2 items of input? => recursion
If you can solve the problem easily with 2 item input, 1 item of input, then recursion matches, try to apply it and see if it helps.
Data structures brainstorm
Start thinking of the different data structures you know, hashmap, set, .. if you could apply them to the data in the problem or use their help would it help?
Don’t try in place string changes copy to a new string
Don't overcomplex yourself with in place string replacement, at least at first, use another data structure.
Whiteboard: Describe the algorithm in exact words then just translate it to code
To make writing on whiteboard easier, first, describe the algorithm in words, then translating to whiteboard is easier.
Recursion recipe let's say for sort
Left, right = split(input) // first split can be in sort body
sort(left) // call self with left
sort(right) // call self with right
merge(left, right) // create new merge method.
Cut linked list in half recipe
Use slow and fast pointers, fast moves node.next.next! then when fast get's to the end of the list this means your slow pointer is at the middle of the linked list!
Useful coding snippets for interviews
Get familiarize with coding snippets which are extremely useful for interviews. See: http://www.programcreek.com/2012/11/top-10-algorithms-for-coding-interview/
Audio version of this blog (like a podcast)
Now by far the best book (although I think I could have created a better version) for studying for programing interviews is: "Cracking The Coding Interview"
Comments
Post a Comment