Video Solution | Category | Name | Link | Notes
Solution | Arrays | Two Sum | https://leetcode.com/problems/two-sum/ | "use hash map to instantly check for difference value | map will add index of last occurrence of a num | don’t use same element twice;"
Solution | Arrays | Best Time to Buy and Sell Stock | https://leetcode.com/problems/best-time-to-buy-and-sell-stock/ | "find local min and search for local max | sliding window;"
Solution | Arrays | Contains Duplicate | https://leetcode.com/problems/contains-duplicate/ | "hashset to get unique values in array | to check for duplicates easily"
Solution | Arrays | Product of Array Except Self | https://leetcode.com/problems/product-of-array-except-self/ | "make two passes | first in-order | second in-reverse | to compute products"
Solution | Arrays | Maximum Subarray | https://leetcode.com/problems/maximum-subarray/ | "pattern: prev subarray cant be negative | dynamic programming: compute max sum for each prefix"
Solution | Arrays | Maximum Product Subarray | https://leetcode.com/problems/maximum-product-subarray/ | dp: compute max and max-abs-val for each prefix subarr;
Solution | Arrays | Find Minimum in Rotated Sorted Array | https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/ | "check if half of array is sorted in order to find pivot | arr is guaranteed to be in at most two sorted subarrays"
Solution | Arrays | Search in Rotated Sorted Array | https://leetcode.com/problems/search-in-rotated-sorted-array/ | "at most two sorted halfs | mid will be apart of left sorted or right sorted | if target is in range of sorted portion then search it | otherwise search other half"
Solution | Arrays | 3Sum | https://leetcode.com/problems/3sum/ | "sort input | for each first element | find next two where -a = b+c | if a=prevA | skip a | if b=prevB skip b to elim duplicates; to find b | c use two pointers | left/right on remaining list;"
Solution | Arrays | Container With Most Water | https://leetcode.com/problems/container-with-most-water/ | "shrinking window | left/right initially at endpoints | shift the pointer with min height;"
Solution | Binary | Sum of Two Integers | https://leetcode.com/problems/sum-of-two-integers/ | "add bit by bit | be mindful of carry | after adding | if carry is still 1 | then add it as well;"
Solution | Binary | Number of 1 Bits | https://leetcode.com/problems/number-of-1-bits/ | "modulo | and dividing n; mod and div are expensive | to divide use bit shift | instead of mod to get 1's place use bitwise & 1;"
Solution | Binary | Counting Bits | https://leetcode.com/problems/counting-bits/ | "write out result for num=16 to figure out pattern; res[i] = res[i - offset] | where offset is the biggest power of 2 <= I;"
Solution | Binary | Missing Number | https://leetcode.com/problems/missing-number/ | compute expected sum - real sum; xor n with each index and value;
Solution | Binary | Reverse Bits | https://leetcode.com/problems/reverse-bits/ | reverse each of 32 bits;
Solution | Dynamic Programming | Climbing Stairs | https://leetcode.com/problems/climbing-stairs/ | "subproblem find (n-1) and (n-2) | sum = n;"
Solution | Dynamic Programming | Coin Change | https://leetcode.com/problems/coin-change/ | "top-down: recursive dfs | for amount | branch for each coin | cache to store prev coin_count for each amount; bottom-up: compute coins for amount = 1 | up until n | using for each coin (amount - coin) | cache prev values"
Solution | Dynamic Programming | Longest Increasing Subsequence | https://leetcode.com/problems/longest-increasing-subsequence/ | "recursive: foreach num | get subseq with num and without num | only include num if prev was less | cache solution of each; dp=subseq length which must end with each num | curr num must be after a prev dp or by itself;"
Solution | Dynamic Programming | Longest Common Subsequence | https://leetcode.com/problems/longest-common-subsequence/ | "recursive: if first chars are equal find lcs of remaining of each | else max of: lcs of first and remain of 2nd and lcs of 2nd remain of first | cache result; nested forloop to compute the cache without recursion;"
Solution | Dynamic Programming | Word Break Problem | https://leetcode.com/problems/word-break/ | "for each prefix | if prefix is in dict and wordbreak(remaining str)=True | then return True | cache result of wordbreak;"
Solution | Dynamic Programming | Combination Sum | https://leetcode.com/problems/combination-sum/ | "visualize the decision tree | base case is curSum = or > target | each candidate can have children of itself or elements to right of it inorder to elim duplicate solutions;"
Solution | Dynamic Programming | House Robber | https://leetcode.com/problems/house-robber/ | "for each num | get max of prev subarr | or num + prev subarr not including last element | store results of prev | and prev not including last element"
Solution | Dynamic Programming | House Robber II | https://leetcode.com/problems/house-robber-ii/ | "subarr = arr without first & last | get max of subarr | then pick which of first/last should be added to it"
Solution | Dynamic Programming | Decode Ways | https://leetcode.com/problems/decode-ways/ | "can cur char be decoded in one or two ways? Recursion -> cache -> iterative dp solution | a lot of edge cases to determine | 52 | 31 | 29 | 10 | 20 only decoded one way | 11 | 26 decoded two ways"
Solution | Dynamic Programming | Unique Paths | https://leetcode.com/problems/unique-paths/ | "work backwards from solution | store paths for each position in grid | to further optimize | we don’t store whole grid | only need to store prev row;"
Solution | Dynamic Programming | Jump Game | https://leetcode.com/problems/jump-game/ | "visualize the recursive tree | cache solution for O(n) time/mem complexity | iterative is O(1) mem | just iterate backwards to see if element can reach goal node | if yes | then set it equal to goal node | continue;"
Solution | Graph | Clone Graph | https://leetcode.com/problems/clone-graph/ | "recursive dfs | hashmap for visited nodes"
Solution | Graph | Course Schedule | https://leetcode.com/problems/course-schedule/ | "build adjacentcy_list with edges | run dfs on each V | if while dfs on V we see V again | then loop exists | otherwise V isnt in a loop | 3 states= not visited | visited | still visiting"
Solution | Graph | Pacific Atlantic Water Flow | https://leetcode.com/problems/pacific-atlantic-water-flow/ | "dfs each cell | keep track of visited | and track which reach pac | atl; dfs on cells adjacent to pac | atl | find overlap of cells that are visited by both pac and atl cells;"
Solution | Graph | Number of Islands | https://leetcode.com/problems/number-of-islands/ | "foreach cell | if cell is 1 and unvisited run dfs | increment cound and marking each contigous 1 as visited"
Solution | Graph | Longest Consecutive Sequence | https://leetcode.com/problems/longest-consecutive-sequence/ | "use bruteforce and try to optimize | consider the max subseq containing each num; add each num to hashset | for each num if num-1 doesn’t exist | count the consecutive nums after num | ie num+1; there is also a union-find solution;"
Solution | Graph | Alien Dictionary (Leetcode Premium) | https://leetcode.com/problems/alien-dictionary/ | "chars of a word not in order | the words are in order | find adjacency list of each unique char by iterating through adjacent words and finding first chars that are different | run topsort on graph and do loop detection;"
Solution | Graph | Graph Valid Tree (Leetcode Premium) | https://leetcode.com/problems/graph-valid-tree/ | "union find | if union return false | loop exists | at end size must equal n | or its not connected; dfs to get size and check for loop | since each edge is double | before dfs on neighbor of N | remove N from neighbor list of neighbor;"
Solution | Graph | Number of Connected Components in an Undirected Graph (Leetcode Premium) | https://leetcode.com/problems/number-of-connected-components-in-an-undirected-graph/ | "dfs on each node that hasn’t been visited | increment component count | adjacency list; bfs and union find are possible;"
Solution | Interval | Insert Interval | https://leetcode.com/problems/insert-interval/ | "insert new interval in order | then merge intervals; newinterval could only merge with one interval that comes before it | then add remaining intervals;"
Solution | Interval | Merge Intervals | https://leetcode.com/problems/merge-intervals/ | "sort each interval | overlapping intervals should be adjacent | iterate and build solution; also graph method | less efficient | more complicated"
Solution | Interval | Non-overlapping Intervals | https://leetcode.com/problems/non-overlapping-intervals/ | "instead of removing | count how max num of intervals you can include | sort intervals | dp to compute max intervals up until the i-th interval;"
Solution | Interval | Meeting Rooms (Leetcode Premium) | https://leetcode.com/problems/meeting-rooms/ | "sort intervals by start time | if second interval doesn’t overlap with first | then third def wont overlap with first;"
Solution | Interval | Meeting Rooms II (Leetcode Premium) | https://leetcode.com/problems/meeting-rooms-ii/ | "we care about the points in time where we are starting/ending a meeting | we already are given those | just separate start/end and traverse counting num of meetings going at these points in time; for each meeting check if a prev meeting has finished before curr started | using min heap;"
Solution | Linked List | Reverse a Linked List | https://leetcode.com/problems/reverse-linked-list/ | "iterate through maintaining cur and prev; recursively reverse | return new head of list"
Solution | Linked List | Detect Cycle in a Linked List | https://leetcode.com/problems/linked-list-cycle/ | "dict to remember visited nodes; two pointers at different speeds | if they meet there is loop"
Solution | Linked List | Merge Two Sorted Lists | https://leetcode.com/problems/merge-two-sorted-lists/ | insert each node from one list into the other
Solution | Linked List | Merge K Sorted Lists | https://leetcode.com/problems/merge-k-sorted-lists/ | "divied and conquer | merge lists | N totalnodes | k-lists | O(N*logk). For each list | find min val | insert it into list | use priorityQ to optimize finding min O(N*logk)"
Solution | Linked List | Remove Nth Node From End Of List | https://leetcode.com/problems/remove-nth-node-from-end-of-list/ | "use dummy node at head of list | compute len of list; two pointers | second has offset of n from first;"
Solution | Linked List | Reorder List | https://leetcode.com/problems/reorder-list/ | "reverse second half of list | then easily reorder it; non-optimal way is to store list in array;"
Solution | Matrix | Set Matrix Zeroes | https://leetcode.com/problems/set-matrix-zeroes/ | "use sets to keep track of all rows | cols to zero out | after | for each num if it is in a zero row or col then change it to 0; flag first cell in row | and col to mark row/col that needs to be zeroed;"
Solution | Matrix | Spiral Matrix | https://leetcode.com/problems/spiral-matrix/ | "keep track of visited cells; keep track of boundaries | layer-by-layer;"
Solution | Matrix | Rotate Image | https://leetcode.com/problems/rotate-image/ | "rotate layer-by-layer | use that it's a square as advantage | rotate positions in reverse order | store a in temp | a = b | b = c | c = d | d = temp;"
Solution | Matrix | Word Search | https://leetcode.com/problems/word-search/ | "dfs on each cell | for each search remember visited cells | and remove cur visited cell right before you return from dfs;"
Solution | String | Longest Substring Without Repeating Characters | https://leetcode.com/problems/longest-substring-without-repeating-characters/ | "sliding window | if we see same char twice within curr window | shift start position;"
Solution | String | Longest Repeating Character Replacement | https://leetcode.com/problems/longest-repeating-character-replacement/ | "PAY ATTENTION: limited to chars A-Z; for each capital char | check if it could create the longest repeating substr | use sliding window to optimize; check if windowlen=1 works | if yes | increment len | if not | shift window right;"
Solution | String | Minimum Window Substring | https://leetcode.com/problems/minimum-window-substring/ | "need is num of unique char in T | HAVE is num of char we have valid count for | sliding window | move right until valid | if valid | increment left until invalid | to check validity keep track if the count of each unique char is satisfied;"
Solution | String | Valid Anagram | https://leetcode.com/problems/valid-anagram/ | "hashmap to count each char in str1 | decrement for str2;"
Solution | String | Group Anagrams | https://leetcode.com/problems/group-anagrams/ | "for each of 26 chars | use count of each char in each word as tuple for key in dict | value is the list of anagrams;"
Solution | String | Valid Parentheses | https://leetcode.com/problems/valid-parentheses/ | "push opening brace on stack | pop if matching close brace | at end if stack empty | return true;"
Solution | String | Valid Palindrome | https://leetcode.com/problems/valid-palindrome/ | "left | right pointers | update left and right until each points at alphanum | compare left and right | continue until left >= right | don’t distinguish between upper/lowercase;"
Solution | String | Longest Palindromic Substring | https://leetcode.com/problems/longest-palindromic-substring/ | "foreach char in str | consider it were the middle | consider if pali was odd or even;"
Solution | String | Palindromic Substrings | https://leetcode.com/problems/palindromic-substrings/ | "same as longest palindromic string | each char in str as middle and expand outwards | do same for pali of even len; maybe read up on manachers alg"
Solution | String | Encode and Decode Strings (Leetcode Premium) | https://leetcode.com/problems/encode-and-decode-strings/ | store length of str before each string and delimiter like '#';
Solution | Tree | Maximum Depth of Binary Tree | https://leetcode.com/problems/maximum-depth-of-binary-tree/ | recursive dfs to find max-depth of subtrees; iterative bfs to count number of levels in tree
Solution | Tree | Same Tree | https://leetcode.com/problems/same-tree/ | recursive dfs on both trees at the same time; iterative bfs compare each level of both trees
Solution | Tree | Invert/Flip Binary Tree | https://leetcode.com/problems/invert-binary-tree/ | "recursive dfs to invert subtrees; bfs to invert levels | use collections.deque; iterative dfs is easy with stack if doing pre-order traversal"
Solution | Tree | Binary Tree Maximum Path Sum | https://leetcode.com/problems/binary-tree-maximum-path-sum/ | "helper returns maxpathsum without splitting branches | inside helper we also update maxSum by computing maxpathsum WITH a split;"
Solution | Tree | Binary Tree Level Order Traversal | https://leetcode.com/problems/binary-tree-level-order-traversal/ | "iterative bfs | add prev level which doesn't have any nulls to the result;"
Solution | Tree | Serialize and Deserialize Binary Tree | https://leetcode.com/problems/serialize-and-deserialize-binary-tree/ | "bfs every single non-null node is added to string | and it's children are added too | even if they're null | deserialize by adding each non-null node to queue | deque node | it's children are next two nodes in string;"
Solution | Tree | Subtree of Another Tree | https://leetcode.com/problems/subtree-of-another-tree/ | traverse s to check if any subtree in s equals t; merkle hashing?
Solution | Tree | Construct Binary Tree from Preorder and Inorder Traversal | https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ | "first element in pre-order is root | elements left of root in in-order are left subtree | right of root are right subtree | recursively build subtrees;"
Solution | Tree | Validate Binary Search Tree | https://leetcode.com/problems/validate-binary-search-tree/ | "trick is use built in python min/max values float(""inf"") | ""-inf"" | as parameters; iterative in-order traversal | check each val is greater than prev;"
Solution | Tree | Kth Smallest Element in a BST | https://leetcode.com/problems/kth-smallest-element-in-a-bst/ | "non-optimal store tree in sorted array; iterative dfs in-order and return the kth element processed | go left until null | pop | go right once;"
Solution | Tree | Lowest Common Ancestor of BST | https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/ | "compare p | q values to curr node | base case: one is in left | other in right subtree | then curr is lca;"
Solution | Tree | Implement Trie (Prefix Tree) | https://leetcode.com/problems/implement-trie-prefix-tree/ | "node has children characters | and bool if its an ending character | node DOESN’T have or need char | since root node doesn’t have a char | only children;"
Solution | Tree | Add and Search Word | https://leetcode.com/problems/add-and-search-word-data-structure-design/ | "if char = ""."" run search for remaining portion of word on all of curr nodes children;"
Solution | Tree | Word Search II | https://leetcode.com/problems/word-search-ii/ | "trick: I though use trie to store the grid | reverse thinking | instead store dictionary words | dfs on each cell | check if cell's char exists as child of root node in trie | if it does | update currNode | and check neighbors | a word could exist multiple times in grid | so don’t add duplicates;"
Solution | Heap | Merge K Sorted Lists | https://leetcode.com/problems/merge-k-sorted-lists/ | "we always want the min of the current frontier | we can store frontier in heap of size k for efficient pop/push; divide and conquer merging lists;"
Solution | Heap | Top K Frequent Elements | https://leetcode.com/problems/top-k-frequent-elements/ | "minheap that’s kept at size k | if its bigger than k pop the min | by the end it should be left with k largest;"
Solution | Heap | Find Median from Data Stream | https://leetcode.com/problems/find-median-from-data-stream/ | "maintain curr median | and all num greater than med in a minHeap | and all num less than med in a maxHeap | after every insertion update median depending on odd/even num of elements;"