Week 01 - Arrays, Strings & Hash Maps
Reference extracted from the detailed guide.
Day 1-2: Arrays & Two Pointers
Watch First (Essential):
- NeetCode: "Two Pointers" pattern → https://www.youtube.com/watch?v=cQ1Oz4ckceM
- NeetCode: "Sliding Window" pattern → https://www.youtube.com/watch?v=p-ss2JNynmw
Problems in Order:
| # | LeetCode | Problem Name | Difficulty | Pattern | Video Solution |
|---|---|---|---|---|---|
| 1 | LC #1 | Two Sum | Easy | Hash Map | https://www.youtube.com/watch?v=KLlXCFG5TnA |
| 2 | LC #121 | Best Time to Buy and Sell Stock | Easy | Sliding Window | https://www.youtube.com/watch?v=1pkOgXD63yU |
| 3 | LC #217 | Contains Duplicate | Easy | Hash Set | https://www.youtube.com/watch?v=3OamzN90kPg |
| 4 | LC #238 | Product of Array Except Self | Medium | Prefix/Suffix | https://www.youtube.com/watch?v=bNvIQI2wAjk |
| 5 | LC #53 | Maximum Subarray | Medium | Kadane's | https://www.youtube.com/watch?v=5WZl3MMT0Eg |
| 6 | LC #152 | Maximum Product Subarray | Medium | DP/Kadane's | https://www.youtube.com/watch?v=lXVy6YWFcRM |
| 7 | LC #153 | Find Minimum in Rotated Sorted Array | Medium | Binary Search | https://www.youtube.com/watch?v=nIVW4P8b1VA |
| 8 | LC #33 | Search in Rotated Sorted Array | Medium | Binary Search | https://www.youtube.com/watch?v=U8XENwh8Oy8 |
| 9 | LC #11 | Container With Most Water | Medium | Two Pointers | https://www.youtube.com/watch?v=UuiTKBwPgAo |
| 10 | LC #15 | 3Sum | Medium | Two Pointers | https://www.youtube.com/watch?v=jzZsG8n2R9A |
How to solve each:
LC #1 (Two Sum):
1. Brute force: O(n²) - two nested loops
2. Optimal: O(n) - use hash map to store {value: index}
3. One pass: check if (target - num) exists in map
LC #121 (Best Time to Buy/Sell):
1. Track minimum price seen so far
2. At each price, calculate profit = current - min
3. Track maximum profit
LC #11 (Container With Most Water):
1. Two pointers at start and end
2. Calculate area = min(height[l], height[r]) * (r - l)
3. Move the pointer with smaller height inward
Day 3-4: Hash Maps Deep Dive
Watch First:
- NeetCode: Hash Map patterns → https://www.youtube.com/watch?v=P6RZZMu_maU
Problems in Order:
| # | LeetCode | Problem Name | Difficulty | Pattern | Video Solution |
|---|---|---|---|---|---|
| 1 | LC #242 | Valid Anagram | Easy | Hash Map Count | https://www.youtube.com/watch?v=9UtInBqnCgA |
| 2 | LC #49 | Group Anagrams | Medium | Hash Map + Sort | https://www.youtube.com/watch?v=vzdNOK2oB2E |
| 3 | LC #347 | Top K Frequent Elements | Medium | Hash Map + Heap | https://www.youtube.com/watch?v=YPTqKIgVk-k |
| 4 | LC #271 | Encode and Decode Strings | Medium | Delimiter | https://www.youtube.com/watch?v=B1k_sxOSgv8 |
| 5 | LC #128 | Longest Consecutive Sequence | Medium | Hash Set | https://www.youtube.com/watch?v=P6RZZMu_maU |
| 6 | LC #146 | LRU Cache | Medium | Hash Map + DLL | https://www.youtube.com/watch?v=7ABFKPK2hD4 |
| 7 | LC #380 | Insert Delete GetRandom O(1) | Medium | Hash Map + Array | https://www.youtube.com/watch?v=j4KwhBziOpg |
| 8 | LC #560 | Subarray Sum Equals K | Medium | Prefix Sum + Map | https://www.youtube.com/watch?v=fFVZt-6sgyo |
Key Templates:
# Template: Frequency Count
from collections import Counter
freq = Counter(nums) # or Counter(s) for strings
# Template: Two Sum Pattern (find pair)
seen = {}
for i, num in enumerate(nums):
complement = target - num
if complement in seen:
return [seen[complement], i]
seen[num] = i
# Template: Group by Key
from collections import defaultdict
groups = defaultdict(list)
for item in items:
key = get_key(item) # e.g., tuple(sorted(item))
groups[key].append(item)
Day 5-7: Linked Lists
Watch First:
- NeetCode: Linked List playlist → https://www.youtube.com/watch?v=G0_I-ZF0S38
Problems in Order:
| # | LeetCode | Problem Name | Difficulty | Pattern | Video Solution |
|---|---|---|---|---|---|
| 1 | LC #206 | Reverse Linked List | Easy | Iterative/Recursive | https://www.youtube.com/watch?v=G0_I-ZF0S38 |
| 2 | LC #21 | Merge Two Sorted Lists | Easy | Two Pointers | https://www.youtube.com/watch?v=XIdigk956u0 |
| 3 | LC #141 | Linked List Cycle | Easy | Fast/Slow Pointer | https://www.youtube.com/watch?v=gBTe7lFR3vc |
| 4 | LC #142 | Linked List Cycle II | Medium | Floyd's Algorithm | https://www.youtube.com/watch?v=wjYnzkAhcNk |
| 5 | LC #143 | Reorder List | Medium | Multiple Techniques | https://www.youtube.com/watch?v=S5bfdUTrKLM |
| 6 | LC #19 | Remove Nth Node From End | Medium | Two Pointers | https://www.youtube.com/watch?v=XVuQxVej6y8 |
| 7 | LC #23 | Merge K Sorted Lists | Hard | Heap/Divide Conquer | https://www.youtube.com/watch?v=q5a5OiGbT6Q |
Key Templates:
# Template: Reverse Linked List
def reverse(head):
prev, curr = None, head
while curr:
nxt = curr.next
curr.next = prev
prev = curr
curr = nxt
return prev
# Template: Fast/Slow Pointer (find middle)
def find_middle(head):
slow = fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
return slow
# Template: Dummy Node (for edge cases)
dummy = ListNode(0)
dummy.next = head
# ... operations
return dummy.next
Comments
Share your approach or ask questions
?
|
Markdown supported
Sign in to post
Loading comments...