Step 1: Sort the list to make it easier to find triplets
[-4] -> [-1] -> [-1] -> [0] -> [1] -> [2]
Why: Sorting helps us use two pointers to find pairs efficiently
Step 2: Fix first number at index 0 (-4), set left=1, right=5
fixed=-4, left=-1, right=2
Why: We try to find two numbers that sum to 4 (because -4 + x + y = 0 means x + y = 4)
Step 3: Sum = -4 + (-1) + 2 = -3, less than 0, move left pointer right
fixed=-4, left=-1 (index 2), right=2
Why: Sum too small, increase left to get bigger sum
Step 4: Sum = -4 + (-1) + 2 = -3, still less than 0, move left pointer right
fixed=-4, left=0 (index 3), right=2
Why: Keep increasing left to find sum closer to zero
Step 5: Sum = -4 + 0 + 2 = -2, less than 0, move left pointer right
fixed=-4, left=1 (index 4), right=2
Why: Sum still too small, move left pointer
Step 6: Sum = -4 + 1 + 2 = -1, less than 0, move left pointer right
fixed=-4, left=2 (index 5), right=2
Why: Left pointer meets right, no triplet with fixed=-4
Step 7: Fix first number at index 1 (-1), set left=2, right=5
fixed=-1, left=-1, right=2
Why: Try to find two numbers that sum to 1
Step 8: Sum = -1 + (-1) + 2 = 0, found triplet [-1, -1, 2], move left and right to avoid duplicates
triplets=[[-1, -1, 2]], left=3, right=4
Why: Found valid triplet, move pointers to find others
Step 9: Sum = -1 + 0 + 1 = 0, found triplet [-1, 0, 1], move left and right
triplets=[[-1, -1, 2], [-1, 0, 1]], left=4, right=3
Why: Found another triplet, pointers crossed, move to next fixed
Step 10: Fix first number at index 2 (-1), skip because same as previous fixed
skip fixed=-1 at index 2
Why: Avoid duplicate triplets by skipping same fixed number
Step 11: Fix first number at index 3 (0), set left=4, right=5
fixed=0, left=4, right=5
Why: Try to find two numbers that sum to 0
Step 12: Sum = 0 + 1 + 2 = 3, greater than 0, move right pointer left
fixed=0, left=4, right=4
Why: Sum too big, decrease right pointer
Step 13: Left pointer meets right, no triplet with fixed=0
end fixed=0
Why: No more pairs to check
Result: [-1] -> [-1] -> [2] and [-1] -> [0] -> [1]