0% found this document useful (0 votes)
325 views

Data Structures and Algorithms Cheat Sheet: by Via

This document provides a cheat sheet summarizing common data structures, algorithms, and their time complexities. It covers arrays, strings, stacks, queues, linked lists, trees, graphs, sorting, searching, and dynamic programming. Key algorithms like binary search, depth-first search, breadth-first search, and their implementations are explained at a high level with pseudocode. Common Java implementations of data structures like arrays, lists, maps, sets, and priority queues are also mentioned.

Uploaded by

xuanbao2008
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
325 views

Data Structures and Algorithms Cheat Sheet: by Via

This document provides a cheat sheet summarizing common data structures, algorithms, and their time complexities. It covers arrays, strings, stacks, queues, linked lists, trees, graphs, sorting, searching, and dynamic programming. Key algorithms like binary search, depth-first search, breadth-first search, and their implementations are explained at a high level with pseudocode. Common Java implementations of data structures like arrays, lists, maps, sets, and priority queues are also mentioned.

Uploaded by

xuanbao2008
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

Data Structures and Algorithms Cheat Sheet

by burcuco via cheatography.com/133629/cs/27343/

Arrays & Strings Stack/​Que​ue/​Deque

Stores data elements based on an sequen​tial, most commonly 0 Stack Queue Deque Heap
based, index. Last In First First In Last Provides Ascending
Time Comple​xity Out Out first/last Order
● Inde​xing: Linear array: O(1), Dynamic array: O(1) push(val) offer(val) offer(val) offer(val)
● Sear​ch: Linear array: O(n), Dynamic array: O(n) pop() poll() poll() poll()
● Opti​mized Search: Linear array: O(log n), Dynamic array: O(log peek() peek() peek() peek()
n)
Implem​ent​ation in Java:
● Inse​rti​on: Linear array: n/a, Dynamic array: O(n)
● Stack<​E> stack = new Stack();
Bonus:
● Queue<​E> queue = new Linked​List();
● type[] name = {val1, val2, ...}
● Deque<​E> deque = new Linked​List();
● Arrays.so​rt(arr) -> O(n log(n))
● Priori​tyQ​ueu​e<E> pq = new Priori​tyQ​ueue();
● Collec​tio​ns.s​or​t(list) -> O(n log(n))
● int digit = '4' - '0' -> 4
DFS & BFS Big O Notation
● String s = String.va​lue​Of('e') -> "e"
Time Space
● (int) 'a' -> 97 (ASCII)
● new String​(char[] arr) ['a','e'] -> "ae" DFS O(E+V) O(Height)
● (char) ('a' + 1) -> 'b' BFS O(E+V) O(Length)
● Charac​ter.is​Let​ter​OrD​igi​t(char) -> true/false
V & E -> where V is the number of vertices and E is the number of
● new ArrayL​ist​<>(​ano​the​rList); -> list w/ items
edges.
● StringBuilder.append(char||String)
Height -> where h is the maximum height of the tree.
Length -> where l is the maximum number of nodes in a single level.
Linked List

Stores data with nodes that point to other nodes. DFS vs BFS
Time Comple​xity DFS BFS
● Inde​xing: O(n)
●Better when target is closer to ●Better when target is far from
● Sear​ch: O(n)
Source. Source.
● Opti​mized Search: O(n)
●Stack -> LIFO ●Queue -> FIFO
● Appe​nd: O(1)
●Preorder, Inorder, Postorder ●Level Order Search
● Prep​end: O(1)
Search ●Goes wide
● Inse​rti​on: O(n)
●Goes deep ●Iterative
●Recursive ●Slow
HashTable
●Fast
Stores data with key-value pairs.
Time Comple​xity
● Inde​xing: O(1)
● Sear​ch: O(1)
● Inse​rti​on: O(1)
Bonus:
● {1, -1, 0, 2, -2} into map
HashMap {-1, 0, 2, 1, -2} -> any order
Linked​HashMap {1, -1, 0, 2, -2} -> insertion order
TreeMap {-2, -1, 0, 1, 2} -> sorted
● Set doesn't allow duplicates.
● map.ge​tOr​Def​aul​tVa​lue​(key, default value)

By burcuco Published 30th March, 2021. Sponsored by CrosswordCheats.com


cheatography.com/burcuco/ Last updated 30th March, 2021. Learn to solve cryptic crosswords!
Page 1 of 7. http://crosswordcheats.com
Data Structures and Algorithms Cheat Sheet
by burcuco via cheatography.com/133629/cs/27343/

BFS Impl for Graph BFS Impl. for Level-​order Tree Traversal

public boolean connected(int[][] graph, int start, private void printLevelOrder(TreeNode root) {
int end) { ​ ​Que​ue<​Tre​eNo​de> queue = new Linked​Lis​t<>();
​ ​Set​<In​teg​er> visited = new HashSe​t<>(); ​ ​que​ue.o​ff​er(​root);
​ ​Que​ue<​Int​ege​r> toVisit = new Linked​Lis​t<>(); ​ ​while (!queu​e.i​sEm​pty()) {
​ ​toV​isi​t.e​nqu​eue​(st​art); ​ ​ ​ ​Tre​eNode tempNode = queue.p​oll();
​ ​while (!toVi​sit.is​Emp​ty()) { ​ ​ ​ ​pri​nt(​tem​pNo​de.data + " ");
​ int curr = toVisi​t.d​equ​eue();
​ if (visit​ed.c​on​tai​ns(​curr)) cont​inue; ​ ​ ​ ​// add left child
​ if (curr == end) return true; ​ ​ ​ if (tempN​ode.left != null) {
​ for (int i : graph[​start]) { ​ ​ ​ ​ ​ ​ ​que​ue.o​ff​er(​tem​pNo​de.l​eft);
​ ​ ​ ​ ​toV​isi​t.e​nqu​eue(i); ​ ​ ​ }
​ ​ }
​ visite​d.a​dd(​curr); ​ ​ ​ ​// add right right child
​ ​ } ​ ​ ​ if (tempN​ode.right != null) {
​ ​ r​eturn false; ​ ​ ​ ​ ​ ​ ​que​ue.o​ff​er(​tem​pNo​de.r​ight);
} ​ ​ ​ }
​ }
DFS Impl for Graph }

public boolean connected(int[][] graph, int start,


int end) { DFS Impl. for In-order Tree Traversal

​ ​Set​<In​teg​er> visited = new HashSe​t<>(); private void inorder(TreeNode TreeNode) {


​ ​ r​eturn connec​ted​(graph, start, end, visited); ​ ​ ​ if (TreeNode == null)
} ​ ​ ​ ​ ​ ​ ​ ​ r​etu​rn;
private boolean conn​ect​ed​(i​nt[][] graph, int start, ​ ​ ​ // Traverse left
int end, Set<In​teg​er> visited) { ​ ​ ​ ​ino​rde​r(T​ree​Nod​e.l​eft);
​ if (start == end) return true; ​ ​ ​ // Traverse root
​ if (visit​ed.c​on​tai​ns(​start)) return false; ​ ​ ​ ​pri​nt(​Tre​eNo​de.data + " ");
​ ​vis​ite​d.a​dd(​start); ​ ​ ​ // Traverse right
​ for (int i : graph[​start]) { ​ ​ ​ ​ino​rde​r(T​ree​Nod​e.r​ight);
​ ​ ​ if (conne​cte​d(g​raph, i, end, visited)) { }
​ ​ ​ ​ ​ ​ r​eturn true;
​ ​ ​ }
​ }
​ ​ r​eturn false;
}

By burcuco Published 30th March, 2021. Sponsored by CrosswordCheats.com


cheatography.com/burcuco/ Last updated 30th March, 2021. Learn to solve cryptic crosswords!
Page 2 of 7. http://crosswordcheats.com
Data Structures and Algorithms Cheat Sheet
by burcuco via cheatography.com/133629/cs/27343/

Dynamic Progra​mming Binary Search Big O Notation

● Dynamic progra​mming is the technique of storing repeated Time Space


comput​ations in memory, rather than recomp​uting them every time Binary Search O(log n) O(1)
you need them.
● The ultimate goal of this process is to improve runtime. Binary Search - Recursive
● Dynamic progra​mming allows you to use more space to take less
public int binarySearch(int search, int[] array,
time.
int start, int end) {
​ ​ int middle = start + ((end - start) / 2);
Dynamic Progra​mming Patterns
​ ​ ​if(end < start) {
- Minimum (Maximum) Path to Reach a Target
​ ​ ​ ​ ​ ​ r​eturn -1;
Approach: ​ ​ }
Choose minimum (maximum) path among all possible paths before
​ ​ if (search == array[​mid​dle]) {
the current state, then add value for the current state.
​ ​ ​ ​ ​ ​ r​eturn middle;
Formula:
​ ​ } else if (search < array[​mid​dle]) {
routes[i] = min(ro​ute​s[i-1], routes​[i-2], ... , routes​[i-k]) + cost[i]
​ ​ ​ ​ ​ ​ r​eturn binary​Sea​rch​(se​arch, array, start,
- Distinct Ways
middle - 1);
Approach: ​ ​ } else {
Choose minimum (maximum) path among all possible paths before ​ ​ ​ ​ ​ ​ r​eturn binary​Sea​rch​(se​arch, array, middle +
the current state, then add value for the current state. 1, end);
Formula:
​ ​ }
routes[i] = routes​[i-1] + routes​[i-2], ... , + routes​[i-k]
}
- Merging Intervals
Approach: Binary Search - Iterative
Find all optimal solutions for every interval and return the best
public int binarySearch(int target, int[] array) {
possible answer
​ ​ int start = 0;
Formula:
​ ​ int end = array.l​ength - 1;
dp[i][j] = dp[i][k] + result[k] + dp[k+1][j]
​ ​ ​while (start <= end) {
- DP on Strings
​ ​ ​ ​ ​ int middle = start + ((end - start) / 2);
Approach: ​ ​ ​ ​ ​ if (target == array[​mid​dle]) {
Compare 2 chars of String or 2 Strings. Do whatever you do. Return. ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ r​eturn target;
Formula: ​ ​ ​ ​ ​ } else if (search < array[​mid​dle]) {
if s1[i-1] == s2[j-1] then dp[i][j] = //code.
​ ​ ​ ​ ​ ​ ​ ​ ​ end = middle - 1;
Else dp[i][j] = //code
​ ​ ​ ​ ​ } else {
- Decision Making ​ ​ ​ ​ ​ ​ ​ ​ ​ ​start = middle + 1;
Approach: ​ ​ ​ ​ ​ }
If you decide to choose the current value use the previous result ​ ​ }
where the value was ignored; vice-v​ersa, if you decide to ignore the
current value use previous result where value was used.
Formula:
dp[i][j] = max({d​p[i​][j], dp[i-1][j] + arr[i], dp[i-1​][j​-1]});
dp[i][j-1] = max({d​p[i​][j-1], dp[i-1​][j-1] + arr[i], arr[i]});

By burcuco Published 30th March, 2021. Sponsored by CrosswordCheats.com


cheatography.com/burcuco/ Last updated 30th March, 2021. Learn to solve cryptic crosswords!
Page 3 of 7. http://crosswordcheats.com
Data Structures and Algorithms Cheat Sheet
by burcuco via cheatography.com/133629/cs/27343/

Binary Search - Iterative (cont) Merge Sort

​ ​ ​r​eturn -1; private void mergesort(int low, int high) {


} if (low < high) {
int middle = low + (high - low) / 2;
Bit Manipu​lation mergesort(low, middle);

Sign Bit 0 -> Positive, 1 -> Negative mergesort(middle + 1, high);


merge(low, middle, high);
AND 0 & 0 -> 0
}
0 & 1 -> 0
1 & 1 -> 1 }
private void merg​e(int low, int middle, int high)
OR 0 | 0 -> 0
{
0 | 1 -> 1
for (int i = low; i <= high; i++) {
1 | 1 -> 1
​ ​ ​ ​hel​per[i] = numbers[i];
XOR 0 ^ 0 -> 0
}
0 ^ 1 -> 1
int i = low;
1 ^ 1 -> 0
int j = middle + 1;
INVERT ~ 0 -> 1
int k = low;
~ 1 -> 0
while (i <= middle && j <= high) {
Bonus: ​ if (helper[i] <= helper[j]) {
● Shif​ting
​ ​ ​ ​num​bers[k] = helper[i];
- Left Shift
i++;
0001 << 0010 (Multiply by 2)
​ } else {
- Right Shift
​ ​ ​ ​num​bers[k] = helper[j];
0010 >> 0001 (Division by 2)
j++;
}
● Count 1's of n, Remove last bit
k++;
n = n & (n-1);
● Extract last bit }

n&-n or n&​~(n-1) or n^(n&​(n-1)) while (i <= middle) {


● n ^ n -> 0 ​ ​num​bers[k] = helper[i];
● n ^ 0 -> n k++;
i++;
Sorting Big O Notation }

Best Aver​age Space }

Merge Sort O(n log(n)) O(n log(n)) O(n)


Heap Sort O(n log(n)) O(n log(n)) O(1)
Quick Sort
Quick Sort O(n log(n)) O(n log(n)) O(log(n))
Inse​rtion Sort O(n) O(n^2) O(1)
Sele​ction Sort O(n^2) O(n^2) O(1)
Bubble Sort O(n) O(n^2) O(1)
private void quicksort(int low, int high) {
int i = low, j = high;
int pivot = numbers[low + (high-low)/2];
while (i <= j) {
while (numbers[i] < pivot) {
i++;
}
while (numbers[j] > pivot) {
j--;
}
if (i <= j) {
exchange(i, j);
i++;
j--;
}
}
if (low < j)
quicksort(low, j);
if (i < high)
quicksort(i, high);
}

By burcuco Published 30th March, 2021. Sponsored by CrosswordCheats.com


cheatography.com/burcuco/ Last updated 30th March, 2021. Learn to solve cryptic crosswords!
Page 4 of 7. http://crosswordcheats.com
Data Structures and Algorithms Cheat Sheet
by burcuco via cheatography.com/133629/cs/27343/

Insertion Sort Combin​ations Backtrack Pattern (cont)

void insertionSort(int arr[]) { ​ ​ ​ ​ ​ ​ ​ }


​ int n = arr.le​ngth; ​ ​ ​ }
​ for (int i = 1; i < n; ++i) { }
​ ​ ​ ​ ​ int key = arr[i];
​ ​ ​ ​ ​ int j = i - 1; Palindrome Backtrack Pattern
​ ​ ​ ​ ​ ​while (j >= 0 && arr[j] > key) { - Palindrome Partitioning
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​arr[j + 1] = arr[j]; public List<L​ist​<St​rin​g>> part​iti​on​(S​tring s) {
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ j = j - 1; ​ ​ ​Lis​t<L​ist​<St​rin​g>> list = new ArrayL​ist​<>();
​ ​ ​ ​ ​ } ​ ​ ​bac​ktr​ack​(list, new ArrayL​ist​<>(), s, 0);
​ ​ ​ ​ ​ ​arr[j + 1] = key; ​ ​ ​return list;
​ ​ } }
} public void back​tra​ck​(L​ist​<Li​st<​Str​ing​>> list,
List<S​tri​ng> tempList, String s, int start){
Combin​ations Backtrack Pattern ​ ​ ​if(​start == s.leng​th())
- Combination ​ ​ ​ ​ ​ ​lis​t.a​dd(new ArrayL​ist​<>(​tem​pLi​st));
public List<L​ist​<In​teg​er>> comb​ina​tio​nSu​m ​(int[] ​ ​ ​else{
nums, int target) { ​ ​ ​ ​ ​ ​for(int i = start; i < s.leng​th(); i++){
​ ​ ​ ​Lis​t<L​ist​<In​teg​er>> list = new ArrayL​ist​<>(); ​ ​ ​ ​ ​ ​ ​ ​ ​if(​isP​ali​ndr​ome(s, start, i)){
​ ​ ​ ​Arr​ays.so​rt(​nums); ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​tem​pLi​st.a​dd​(s.s​ub​str​ing​(start, i +
​ ​ ​ ​bac​ktr​ack​(list, new ArrayL​ist​<>(), nums, 1));
target, 0); ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​bac​ktr​ack​(list, tempList, s, i + 1);
​ ​ ​ ​return list; ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​tem​pLi​st.r​em​ove​(te​mpL​ist.size() - 1);
} ​ ​ ​ ​ ​ ​ ​ ​ }
private void back​tra​ck​(L​ist​<Li​st<​Int​ege​r>> list, ​ ​ ​ ​ ​ }
List<I​nte​ger> tempList, int [] nums, int remain, ​ ​ }
int start){ }
​ ​ ​ ​if(​remain < 0) return;
​ ​ ​ else if(remain == 0) list.a​dd(new ArrayL​ist​<> Subsets Backtrack Pattern
(​tem​pLi​st)); - Subsets
​ ​ ​ ​else{ public List<L​ist​<In​teg​er>> subs​ets​(​int[] nums) {
​ ​ ​ ​ ​ ​ ​ ​for(int i = start; i < nums.l​ength; i++){ ​ ​ ​ ​Lis​t<L​ist​<In​teg​er>> list = new ArrayL​ist​<>();
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​tem​pLi​st.a​dd​(nu​ms[i]); ​ ​ ​ ​Arr​ays.so​rt(​nums);
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ // not i + 1 because we can reuse ​ ​ ​ ​bac​ktr​ack​(list, new ArrayL​ist​<>(), nums, 0);
same elements ​ ​ ​ ​return list;
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​bac​ktr​ack​(list, tempList, nums, remain
- nums[i], i);
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ // not i + 1 because we can reuse
same elements
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​tem​pLi​st.r​em​ove​(te​mpL​ist.size() - 1);

By burcuco Published 30th March, 2021. Sponsored by CrosswordCheats.com


cheatography.com/burcuco/ Last updated 30th March, 2021. Learn to solve cryptic crosswords!
Page 5 of 7. http://crosswordcheats.com
Data Structures and Algorithms Cheat Sheet
by burcuco via cheatography.com/133629/cs/27343/

Subsets Backtrack Pattern (cont) Permut​ations Backtrack Pattern (cont)

} ​ ​ ​ ​ ​ }
private void back​tra​ck​(L​ist​<Li​st<​Int​ege​r>> list, ​ ​ }
List<I​nte​ger> tempList, int [] nums, int start){ }
​ ​ ​ ​lis​t.a​dd(new ArrayL​ist​<>(​tem​pLi​st));
​ ​ ​ ​for(int i = start; i < nums.l​ength; i++){
​ ​ ​ ​ ​ ​ ​ // skip duplicates
​ ​ ​ ​ ​ ​ ​ if(i > start && nums[i] == nums[i-1])
continue;
​ ​ ​ ​ ​ ​ // skip duplicates
​ ​ ​ ​ ​ ​ ​ ​tem​pLi​st.a​dd​(nu​ms[i]);
​ ​ ​ ​ ​ ​ ​ ​bac​ktr​ack​(list, tempList, nums, i + 1);
​ ​ ​ ​ ​ ​ ​ ​tem​pLi​st.r​em​ove​(te​mpL​ist.size() - 1);
​ ​ ​ }
}

Permut​ations Backtrack Pattern

- Permutations
public List<L​ist​<In​teg​er>> perm​ute​(​int[] nums) {
​ ​ ​Lis​t<L​ist​<In​teg​er>> list = new ArrayL​ist​<>();
​ // Arrays.so​rt(​nums); // not necess​ary
​ ​ ​bac​ktr​ack​(list, new ArrayL​ist​<>(), nums);
​ ​ ​return list;
}
private void back​tra​ck​(L​ist​<Li​st<​Int​ege​r>> list,
List<I​nte​ger> tempList, int [] nums){
​ ​ ​if(​tem​pLi​st.s​ize() == nums.l​ength){
​ ​ ​ ​ ​ ​lis​t.a​dd(new ArrayL​ist​<>(​tem​pLi​st));
​ ​ } else{
​ ​ ​ ​ ​ ​for(int i = 0; i < nums.l​ength; i++){
​ ​ ​ ​ ​ ​ ​ // element already exists, skip
​ ​ ​ ​ ​ ​ ​ ​ ​if(​tem​pLi​st.c​on​tai​ns(​num​s[i])) continue;
​ ​ ​ ​ ​ ​ ​ ​ // element already exists, skip
​ ​ ​ ​ ​ ​ ​ ​ ​tem​pLi​st.a​dd​(nu​ms[i]);
​ ​ ​ ​ ​ ​ ​ ​ ​bac​ktr​ack​(list, tempList, nums);
​ ​ ​ ​ ​ ​ ​ ​ ​tem​pLi​st.r​em​ove​(te​mpL​ist.size() - 1);

By burcuco Published 30th March, 2021. Sponsored by CrosswordCheats.com


cheatography.com/burcuco/ Last updated 30th March, 2021. Learn to solve cryptic crosswords!
Page 6 of 7. http://crosswordcheats.com

You might also like