Hermann Ebbinghaus hypothesized that the speed of forgetting depends on a number of factors such as the difficulty of the learned material (e.g. how meaningful it is), its representation and other physiological factors such as stress and sleep. He further hypothesized that the basal forgetting rate differs little between individuals. He concluded that the difference in performance can be explained by mnemonic representation skills.
He went on to hypothesize that basic training in mnemonic techniques can help overcome those differences in part. He asserted that the best methods for increasing the strength of memory are:
- better memory representation (e.g. with mnemonic techniques)
- repetition based on active recall (especially spaced repetition).
His premise was that each repetition in learning increases the optimum interval before the next repetition is needed (for near-perfect retention, initial repetitions may need to be made within days, but later they can be made after years). He discovered that information is easier to recall when it's built upon things you already know, and the forgetting curve was flattened by every repetition. It appeared that by applying frequent training in learning, the information was solidified by repeated recalling.
LeetCode is a website where people – mostly software engineers – practice their coding skills. There are 800+ questions (and growing), each with multiple solutions. Questions are ranked by level of difficulty: easy, medium, and hard.
Following the spaced repetition methodology, the following schedule was proposed:
Day 1 (Arrays #0 - Warm up)
Day 2 (Strings #0 - Warm up)
Day 3 (Linked List #0 - Warm up)
Day 4 (Trees #0 - Warm up)
Convert Sorted Array to Binary Search Tree
Day 5 (Graph #0 - Warm up)
Binary Tree Level Order Traversal
Day 6 (Hash #0 - Warm up)
Day 7 (Arrays #1)
Day 8 (Arrays #2)
Day 9 (Arrays #3)
Day 10 (Arrays #4)
Day 11 (Arrays #5)
Increasing Triplet Subsequence
Day 12 (Strings #1)
Day 13 (Strings #2)
Day 14 (Strings #3)
Find Kth Bit in Nth Binary String
Day 15 (Strings #4)
Day 16 (Strings #5)
Day 17 (Linked List #1)
Day 18 (Linked List #2)
Day 19 (Linked List #3)
Day 20 (Linked List #4)
Intersection of Two Linked Lists
Day 21 (Linked List #5)
Swapping Nodes in a Linked List
Day 22 (Arrays #1 - Review #1)
Day 23 (Arrays #2 - Review #1)
Day 24 (Arrays #3 - Review #1)
Day 25 (Arrays #4 - Review #1)
Day 26 (Arrays #5 - Review #1)
Increasing Triplet Subsequence
Day 27 (Strings #1 - Review #1)
Day 28 (Strings #2 - Review #1)
Day 29 (Strings #3 - Review #1)
Find Kth Bit in Nth Binary String
Day 30 (Strings #4 - Review #1)
Day 31 (Strings #5 - Review #1)
Day 32 (Linked List #1 - Review #1)
Day 33 (Linked List #2 - Review #1)
Day 34 (Linked List #3 - Review #1)
Day 35 (Linked List #4 - Review #1)
Intersection of Two Linked Lists
Day 36 (Linked List #5 - Review #1)
Swapping Nodes in a Linked List
Day 37 (Trees #1)
Binary Tree Level Order Traversal
Day 38 (Trees #2)
Day 39 (Trees #3)
Binary Tree Zigzag Level Order Traversal
Day 40 (Trees #4)
Construct Binary Tree from Preorder and Inorder Traversal
Day 41 (Trees #5)
Populating Next Right Pointers in Each Node
Day 42 (Graph #1)
Day 43 (Graph #2)
Minimum Number of Vertices to Reach All Nodes
Day 44 (Graph #3)
Day 45 (Graph #4)
Day 46 (Graph #5)
Day 47 (Arrays #1 - Review #2)
Day 48 (Arrays #2 - Review #2)
Day 49 (Arrays #3 - Review #2)
Day 50 (Arrays #4 - Review #2)
Day 51 (Arrays #5 - Review #2)
Increasing Triplet Subsequence
Day 52 (Trees #1 - Review #1)
Binary Tree Level Order Traversal
Day 53 (Trees #2 - Review #1)
Day 54 (Trees #3 - Review #1)
Binary Tree Zigzag Level Order Traversal
Day 55 (Trees #4 - Review #1)
Construct Binary Tree from Preorder and Inorder Traversal
Day 56 (Trees #5 - Review #1)
Populating Next Right Pointers in Each Node
Day 57 (Strings #1 - Review #2)
Day 58 (Strings #2 - Review #2)
Day 59 (Strings #3 - Review #2)
Find Kth Bit in Nth Binary String
Day 60 (Strings #4 - Review #2)
Day 61 (Strings #5 - Review #2)
Day 62 (Graph #1 - Review #1)
Day 63 (Graph #2 - Review #1)
Minimum Number of Vertices to Reach All Nodes
Day 64 (Graph #3 - Review #1)
Day 65 (Graph #4 - Review #1)
Day 66 (Graph #5 - Review #1)
Day 67 (Linked List #1 - Review #2)
Day 68 (Linked List #2 - Review #2)
Day 69 (Linked List #3 - Review #2)
Day 70 (Linked List #4 - Review #2)
Intersection of Two Linked Lists
Day 71 (Linked List #5 - Review #2)
Swapping Nodes in a Linked List
Day 72 (Hash #1)
Day 73 (Hash #2)
Day 74 (Hash #3)
Day 75 (Hash #4)
Split Array into Consecutive Subsequences
Day 76 (Hash #5)
Day 77 (Trees #1 - Review #2)
Binary Tree Level Order Traversal
Day 78 (Trees #2 - Review #2)
Day 79 (Trees #3 - Review #2)
Binary Tree Zigzag Level Order Traversal
Day 80 (Trees #4 - Review #2)
Construct Binary Tree from Preorder and Inorder Traversal
Day 81 (Trees #5 - Review #2)
Populating Next Right Pointers in Each Node
Day 82 (Backtracking #1)
Letter Combinations of a Phone Number
Day 83 (Backtracking #2)
Day 84 (Backtracking #3)
Day 85 (Backtracking #4)
Day 86 (Backtracking #5)
Day 87 (Hash #1 - Review #1)
Day 88 (Hash #2 - Review #1)
Day 89 (Hash #3 - Review #1)
Day 90 (Hash #4 - Review #1)
Split Array into Consecutive Subsequences
Day 91 (Hash #5 - Review #1)
Day 92 (Arrays #1 - Review #3)
Day 93 (Arrays #2 - Review #3)
Day 94 (Arrays #3 - Review #3)
Day 95 (Arrays #4 - Review #3)
Day 96 (Arrays #5 - Review #3)
Increasing Triplet Subsequence
Day 97 (Backtracking #1 - Review #1)
Letter Combinations of a Phone Number
Day 98 (Backtracking #2 - Review #1)
Day 99 (Backtracking #3 - Review #1)
Day 100 (Backtracking #4 - Review #1)
Day 101 (Backtracking #5 - Review #1)
Day 102 (Strings #1 - Review #3)
Day 103 (Strings #2 - Review #3)
Day 104 (Strings #3 - Review #3)
Find Kth Bit in Nth Binary String
Day 105 (Strings #4 - Review #3)
Day 106 (Strings #5 - Review #3)
Day 107 (Linked List #1 - Review #3)
Day 108 (Linked List #2 - Review #3)
Day 109 (Linked List #3 - Review #3)
Day 110 (Linked List #4 - Review #3)
Intersection of Two Linked Lists
Day 111 (Linked List #5 - Review #3)
Swapping Nodes in a Linked List
Day 112 (Hash #1 - Review #2)
Day 113 (Hash #2 - Review #2)
Day 114 (Hash #3 - Review #2)
Day 115 (Hash #4 - Review #2)
Split Array into Consecutive Subsequences
Day 116 (Hash #5 - Review #2)
Day 117 (Trees #1 - Review #3)
Binary Tree Level Order Traversal
Day 118 (Trees #2 - Review #3)
Day 119 (Trees #3 - Review #3)
Binary Tree Zigzag Level Order Traversal
Day 120 (Trees #4 - Review #3)
Construct Binary Tree from Preorder and Inorder Traversal
Day 121 (Trees #5 - Review #3)
Populating Next Right Pointers in Each Node
Day 122 (Backtracking #1 - Review #2)
Letter Combinations of a Phone Number
Day 123 (Backtracking #2 - Review #2)
Day 124 (Backtracking #3 - Review #2)
Day 125 (Backtracking #4 - Review #2)
Day 126 (Backtracking #5 - Review #2)