Whenever you see a problem:

Step 1

Understand the problem.

inputs
outputs
constraints
edge cases

Step 2

Solve manually with a small example.

Step 3

Write brute force solution.

Step 4

Ask:

What repeated work is happening? Can I store results to avoid repeating work?

Step 5

Use a data structure:

Common ones:

hashmap
set
stack
queue
heap
linked list

Time Complexity (Very Important in DSA)

Ask:

How many operations happen? How does that grow as input size grows?

Common complexities:

O(1) - constant time
O(log n) - logarithmic time
O(n) - linear time
O(n log n) - linearithmic time
O(n^2) - quadratic time
O(2^n) - exponential time
O(n!) - factorial time

Space Complexity

Ask: How much extra space do I need?

Common complexities:

O(1) - constant space
O(n) - linear space
O(n^2) - quadratic space

Asking important questions while solving DSA problems is key to developing a deep understanding of algorithms and data structures. It helps you identify patterns, optimize solutions, and write efficient code. This is the secret.

Happy hacking!