A student-taught course at the University of Maryland
CMSC389O: The Coding Interview
A comprehensive, practical introduction to technical interviews. We'll go over basic topics such as Big O and String Manipulation and then dive into more complex topics such as Bit Manipulation and Dynamic Programming.
The course gave me really good insight on the types/topic of coding questions most interviewers throw at you. Exposure to problems helped me decipher tougher problems utilizing coding questions I’ve seen in class as a starting point. The setup was very realistic and gave me practice for my future interview. This course condenses and organizes what you should know before walking into your technical interview.
Doing in-person mock interviews every week on topics from graphs to system design helped hone my interview skills. After taking the class, I felt confident and prepared in real interviews. Overall, the class is an excellent blend of learning technical problem solving and practicing real world interview skills.
big o.
Big-O notation is a central concept in algorithm analysis. We cover common complexity classes with several examples and applications of Big-O notation to technical interviews.
arrays and strings.
Arrays are one of the most central data structures in computer science. Sooner or later you’ll be faced with an Array
question when interviewing with any company. Strings, being just character arrays, offer a great way to test Array
skills without relying on more complicated data types.
“Fast i, Slow j” is a concept used for various array methods, including partition, a central piece of various sorting
algorithms such as Quicksort. Next, “Sliding Window” approaches allow for linear-time algorithms for various problems
with otherwise O(n2) limitations. Finally, arrays can often be used for indexing, in place of a map or set; as a
heuristic, if your algorithm relies on a map/set and can get away with an array, use the latter.
Three problems were also covered in this lecture: Target sum (finding two elements that sum closest to 0), Valid
Parenthesis (checking whether a sequence of parenthesis is syntactically correct), and Pangram (finding whether a string
has all 26 characters of the alphabet).
sorting and searching.
We cover characteristics of different sorting algorithms (mergesort, counting sort, etc) and applications of sorting.
We also present a high level overview of searching algorithms: linear search, binary search, breadth-first and depth-first searches, and substring search.
inheritance.
We cover inheritance, one of the main pillars of Object-Oriented-Programming. We discus basic intuitions, overloading, and overriding. Two example class hierarchies are covered in which these concepts are applied.
linked lists.
We cover LinkedLists, including techniques like two pointers, traversal, and cycle detection. We show when to use these techniques, and give numerous examples of problems involving LinkedLists.
graphs.
A primer on Graphs. We cover what graphs are, common terminology, code representation and basic algorithms such as BFS and DFS.
we love mail!
Reach out to us at cmsc389o@gmail.com
© Copyright CMSC389O and STICs UMD