← Back to Quest Log

Learning Data Structures & Algorithms

January 28, 2026
ProgrammingLearningNotes

After completing the first version of this website in early 2026, I was looking for my next project.

I decided now was a good time to level up my engineering skills and dive into Data Structures and Algorithms (DSA).

I knew how to code, but I felt like I was really lacking fundamental DSA knowledge...

Let's do this.

The Beginning: LeetCode

I made a LeetCode account and started coding.

It was actually quite intimidating at first. 😅 There are thousands of problems, and even though I had experience with game dev, Arduino, and web dev, my raw problem-solving abilities weren't sharp enough yet.

I simply did not know the basic patterns & tricks. At the start, I could rarely solve a "Medium" problem without assistance. 💀

But with AI as my guide, I started tackling them one by one.

The Concepts

I went from topic to topic, which helped me see how these concepts connect together. I explored many concepts in over a short period of time:

  • Arrays & Strings: Two Pointers, Sliding Window, Prefix Sums, Kadane's Algorithm, Greedy Algorithms
  • Search & Sort: Binary Search, Quick Sort, Merge Sort.
  • Graph Theory: Breadth-First Search (BFS), Depth-First Search (DFS), Dijkstra's Algorithm
  • Data Structures: Linked Lists, Stacks, Queues, Binary Trees, Heaps.
  • Low Level: Bit Manipulation (Logic gates, toggling bits).

Before this, if you told me something had to run in O(n) time, I would have looked at you blankly. Now, I know that Space & Time Complexity (Big O) is actually straightforward... implementing the algorithm is the hard part!

Encountering New Structures

I did a modified version of the Blind 75 to start.

  • Binary Trees: I had seen pictures of them, but never wrote code for one. It was actually so cool to see how Recursion is used to parse these complex structures (e.g., Inverting a Binary Tree).
  • Linked Lists: Reversing a linked list felt like voodoo magic the first time I did it, but now it seems so simple. Same thing for using fast & slow pointers.
  • Bit Manipulation: This was surprisingly chill. Since I've done circuit work before, I understood the logic gates (AND, OR, XOR). Though I did learn a few tricks like checking if a number is a power of two or getting the lowest set bit.
  • Dynamic Programming: Some of my favorite problems involved dynamic programming, like: Climbing Stairs, House Robber, Unique Paths, and Dungeon Game.

The Virtual Contest 🏆

As I got more confident, I attempted my first Virtual Contest. I had no idea what to expect.

  • The Challenge: 4 Questions (3 Mediums, 1 Hard).
  • The Result: I solved the first two Mediums!
  • The Wall: I ran out of time on the third question, even though I correctly identified it as a BFS problem.

It was a humbling reality check, but also proof of progress. I still have much to learn...

My Favorite Problems So Far

Some problems are just satisfying to solve. Here are my top picks:

  1. Build a Full Adder: Super cool low-level logic.
  2. Dungeon Game: The first "Hard" problem I ever completed.
  3. Number of Islands: One of the first times I successfully applied DFS on a grid.
  4. Invert Binary Tree: My "aha!" moment with recursion.

What's Next?

I eventually discovered AlgoMaster, a curated collection of LeetCode questions presented in a specific order so you learn incrementally.

I switched to this track because it provides a more structure than jumping around problems randomly.

My plan is simple:

  • Continue grinding through the AlgoMaster curriculum.
  • Use AI to explain the deeper concepts after I solve (or fail) a problem.
  • Do weekly contests to benchmark my speed and accuracy.

I'm taking it one problem at a time. Let's do it.