Tech Interview Cheat Sheet

This list is meant to be both a quick guide and reference for further research into these topics. It’s basically a summary of that comp sci course you never took or forgot about, so there’s no way it can cover everything in depth.

Table of Content

Asymptotic Notation

Definition:

Asymptotic Notation is the hardware independent notation used to tell the time and space complexity of an algorithm. Meaning it’s a standardized way of measuring how much memory an algorithm uses or how long it runs for given an input.

Complexities

The following are the Asymptotic rates of growth from best to worst:

Visualized below; the x-axis representing input size and the y-axis representing complexity:

#

Big-O notation

Big-O refers to the upper bound of time or space complexity of an algorithm, meaning it worst case runtime scenario. An easy way to think of it is that runtime could be better than Big-O but it will never be worse.

Big-Ω (Big-Omega) notation

Big-Omega refers to the lower bound of time or space complexity of an algorithm, meaning it is the best runtime scenario. Or runtime could worse than Big-Omega, but it will never be better.

Big-θ (Big-Theta) notation

Big-Theta refers to the tight bound of time or space complexity of an algorithm. Another way to think of it is the intersection of Big-O and Big-Omega, or more simply runtime is guaranteed to be a given complexity, such as n log n.

What you need to know

Data Structures

Array

Definition

What you need to know

Time Complexity

Linked List

Definition

What you need to know

Time Complexity

Hash Table or Hash Map

Definition

What you need to know

Time Complexity

Binary Tree

Definition

What you need to know

Time Complexity

Algorithms

Algorithm Basics

Recursive Algorithms

Definition

What you need to know

Iterative Algorithms

Definition

What you need to know

Recursion Vs. Iteration

Pseudo Code of Moving Through an Array

Recursion                         | Iteration
----------------------------------|----------------------------------
recursive method (array, n)       | iterative method (array)
  if array[n] is not nil          |   for n from 0 to size of array
    print array[n]                |     print(array[n])
    recursive method(array, n+1)  |
  else                            |
    exit loop                     |

Greedy Algorithms

Definition

What you need to know

Pseudo Code of a Greedy Algorithm to Find Largest Difference of any Two Numbers in an Array.

greedy algorithm (array)
  var largest difference = 0
  var new difference = find next difference (array[n], array[n+1])
  largest difference = new difference if new difference is > largest difference
  repeat above two steps until all differences have been found
  return largest difference

This algorithm never needed to compare all the differences to one another, saving it an entire iteration.

Search Algorithms

Definition

What you need to know

Time Complexity

Definition

What you need to know

Time Complexity

Nuances

Sorting Algorithms

Selection Sort

Definition

What you need to know

Time Complexity

Space Complexity

Visualization

#

(source: Wikipedia, Insertion Sort)

Insertion Sort

Definition

What you need to know

Time Complexity

Space Complexity

Visualization

#

(source: Wikipedia, Insertion Sort)

Merge Sort

Definition

What you need to know

Time Complexity

Space Complexity

Visualization

#

(source: Wikipedia, Merge Sort)

Quicksort

Definition

What you need to know

Time Complexity

Space Complexity

Visualization

#

(source: Wikipedia, Quicksort)

Merge Sort Vs. Quicksort

Original post: https://github.com/TSiege/Tech-Interview-Cheat-Sheet