Bird
Raised Fist0
DSA Pythonprogramming~20 mins

Three Sum Problem All Unique Triplets in DSA Python - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Three Sum Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Three Sum Unique Triplets Function
What is the output of the following Python function when called with nums = [-1, 0, 1, 2, -1, -4]?
DSA Python
def three_sum(nums):
    nums.sort()
    result = []
    for i in range(len(nums) - 2):
        if i > 0 and nums[i] == nums[i - 1]:
            continue
        left, right = i + 1, len(nums) - 1
        while left < right:
            total = nums[i] + nums[left] + nums[right]
            if total == 0:
                result.append([nums[i], nums[left], nums[right]])
                while left < right and nums[left] == nums[left + 1]:
                    left += 1
                while left < right and nums[right] == nums[right - 1]:
                    right -= 1
                left += 1
                right -= 1
            elif total < 0:
                left += 1
            else:
                right -= 1
    return result

print(three_sum([-1, 0, 1, 2, -1, -4]))
A[[-4, 2, 2], [-1, 0, 1]]
B[[-1, -1, 2], [-1, 0, 1]]
C[[-1, 0, 1], [0, 1, -1]]
D[[-1, -1, 2], [-4, 0, 4]]
Attempts:
2 left
💡 Hint
Sort the list first and use two pointers to find pairs that sum with nums[i] to zero.
❓ Predict Output
intermediate
2:00remaining
Number of Unique Triplets Summing to Zero
How many unique triplets does the function find for the input nums = [3, 0, -2, -1, 1, 2]?
DSA Python
def three_sum(nums):
    nums.sort()
    result = []
    for i in range(len(nums) - 2):
        if i > 0 and nums[i] == nums[i - 1]:
            continue
        left, right = i + 1, len(nums) - 1
        while left < right:
            total = nums[i] + nums[left] + nums[right]
            if total == 0:
                result.append([nums[i], nums[left], nums[right]])
                while left < right and nums[left] == nums[left + 1]:
                    left += 1
                while left < right and nums[right] == nums[right - 1]:
                    right -= 1
                left += 1
                right -= 1
            elif total < 0:
                left += 1
            else:
                right -= 1
    return result

print(len(three_sum([3, 0, -2, -1, 1, 2])))
A3
B1
C4
D2
Attempts:
2 left
💡 Hint
Count the unique triplets after sorting and using two pointers.
🔧 Debug
advanced
2:00remaining
Identify the Error in Triplet Finding Code
What best describes the result of running the following code with nums = [0, 0, 0, 0]?
DSA Python
def three_sum(nums):
    nums.sort()
    result = []
    for i in range(len(nums) - 2):
        left, right = i + 1, len(nums) - 1
        while left < right:
            total = nums[i] + nums[left] + nums[right]
            if total == 0:
                result.append([nums[i], nums[left], nums[right]])
                left += 1
                right -= 1
            elif total < 0:
                left += 1
            else:
                right -= 1
    return result

print(three_sum([0, 0, 0, 0]))
ANo error, output: [[0, 0, 0], [0, 0, 0]]
BInfinite loop because duplicates are not skipped
CIndexError due to skipping duplicates incorrectly
DTypeError due to wrong data type
Attempts:
2 left
💡 Hint
Check how duplicates are handled inside the while loop.
❓ Predict Output
advanced
2:00remaining
Output of Modified Three Sum with Early Break
What is the output of this modified three_sum function when called with nums = [-2, 0, 1, 1, 2]?
DSA Python
def three_sum(nums):
    nums.sort()
    result = []
    for i in range(len(nums) - 2):
        if nums[i] > 0:
            break
        if i > 0 and nums[i] == nums[i - 1]:
            continue
        left, right = i + 1, len(nums) - 1
        while left < right:
            total = nums[i] + nums[left] + nums[right]
            if total == 0:
                result.append([nums[i], nums[left], nums[right]])
                while left < right and nums[left] == nums[left + 1]:
                    left += 1
                while left < right and nums[right] == nums[right - 1]:
                    right -= 1
                left += 1
                right -= 1
            elif total < 0:
                left += 1
            else:
                right -= 1
    return result

print(three_sum([-2, 0, 1, 1, 2]))
A[[0, 1, -1]]
B[[-2, 1, 1]]
C[[-2, 0, 2], [-2, 1, 1]]
D[]
Attempts:
2 left
💡 Hint
The early break stops the loop if the current number is positive.
🧠 Conceptual
expert
2:00remaining
Time Complexity of Three Sum Algorithm
What is the time complexity of the standard three sum algorithm that sorts the array and uses two pointers to find unique triplets?
AO(n^3)
BO(n log n)
CO(n)
DO(n^2)
Attempts:
2 left
💡 Hint
Consider the sorting step and the nested loops with two pointers.

Practice

(1/5)
1. What is the main goal of the Three Sum Problem in arrays?
easy
A. Find all unique triplets that sum to zero
B. Find the maximum sum of any three elements
C. Sort the array in ascending order
D. Count the number of pairs with sum zero

Solution

  1. Step 1: Understand the problem statement

    The Three Sum Problem asks to find all unique sets of three numbers in an array that add up to zero.
  2. Step 2: Differentiate from other sum problems

    Unlike finding pairs or maximum sums, this problem focuses on triplets with sum exactly zero and uniqueness.
  3. Final Answer:

    Find all unique triplets that sum to zero -> Option A
  4. Quick Check:

    Three Sum = unique triplets summing to zero [OK]
Hint: Look for three numbers adding exactly to zero [OK]
Common Mistakes:
  • Confusing with pair sum problems
  • Looking for maximum sum instead of zero sum
  • Ignoring uniqueness of triplets
2. Which of the following Python code snippets correctly initializes an empty list to store unique triplets for the Three Sum Problem?
easy
A. triplets = []
B. triplets = {}
C. triplets = set()
D. triplets = None

Solution

  1. Step 1: Identify the correct data structure for storing triplets

    Triplets are stored as lists inside a list, so initializing an empty list is correct.
  2. Step 2: Analyze other options

    {} creates a dictionary, set() is for unique single elements, None is not a container.
  3. Final Answer:

    triplets = [] -> Option A
  4. Quick Check:

    Empty list for triplets = [] [OK]
Hint: Use [] to store multiple triplets as lists [OK]
Common Mistakes:
  • Using {} which creates a dictionary
  • Using set() which stores unique single elements, not lists
  • Assigning None which is not a container
3. What is the output of the following code snippet for the input array nums = [-1, 0, 1, 2, -1, -4]?
def three_sum(nums):
    nums.sort()
    result = []
    for i in range(len(nums)-2):
        if i > 0 and nums[i] == nums[i-1]:
            continue
        left, right = i+1, len(nums)-1
        while left < right:
            total = nums[i] + nums[left] + nums[right]
            if total == 0:
                result.append([nums[i], nums[left], nums[right]])
                while left < right and nums[left] == nums[left+1]:
                    left += 1
                while left < right and nums[right] == nums[right-1]:
                    right -= 1
                left += 1
                right -= 1
            elif total < 0:
                left += 1
            else:
                right -= 1
    return result

print(three_sum(nums))
medium
A. []
B. [[-1, 0, 1], [0, 1, 2]]
C. [[0, 0, 0]]
D. [[-1, -1, 2], [-1, 0, 1]]

Solution

  1. Step 1: Sort the input array

    Sorted nums = [-4, -1, -1, 0, 1, 2]
  2. Step 2: Find unique triplets summing to zero

    Triplets found are [-1, -1, 2] and [-1, 0, 1]. These are appended to result.
  3. Final Answer:

    [[-1, -1, 2], [-1, 0, 1]] -> Option D
  4. Quick Check:

    Triplets sum zero = [[-1,-1,2],[-1,0,1]] [OK]
Hint: Sort array and use two pointers to find triplets [OK]
Common Mistakes:
  • Not sorting the array before processing
  • Including duplicate triplets
  • Incorrect pointer movement causing missed triplets
4. Identify the bug in the following code snippet for the Three Sum Problem:
def three_sum(nums):
    nums.sort()
    result = []
    for i in range(len(nums)):
        left, right = i+1, len(nums)-1
        while left < right:
            total = nums[i] + nums[left] + nums[right]
            if total == 0:
                result.append([nums[i], nums[left], nums[right]])
                left += 1
                right -= 1
            elif total < 0:
                left += 1
            else:
                right -= 1
    return result

print(three_sum([-1, 0, 1, 2, -1, -4]))
medium
A. The outer loop should run till len(nums)-2, not len(nums)
B. No check to skip duplicate triplets
C. Missing sorting of the input array
D. Incorrect initialization of left and right pointers

Solution

  1. Step 1: Check for duplicate skipping logic

    The code lacks 'if i > 0 and nums[i] == nums[i-1]: continue' and inner while loops to skip duplicate left/right values after finding a triplet. This causes duplicate triplets like [-1, 0, 1] appearing twice.
  2. Step 2: Verify other parts

    Sorting is present, pointers initialized correctly, loop range to len(nums) is unnecessary but does not cause errors or duplicates.
  3. Final Answer:

    No check to skip duplicate triplets -> Option B
  4. Quick Check:

    Missing duplicate skips cause repeated triplets [OK]
Hint: Add duplicate skips for i, left, and right pointers [OK]
Common Mistakes:
  • Missing 'if i > 0 and nums[i] == nums[i-1]' check
  • No inner while loops to skip duplicate left/right
  • Thinking loop range causes index errors (it doesn't)
5. Given the input array nums = [0, 0, 0, 0], what is the correct output of a Three Sum solution that returns all unique triplets summing to zero?
hard
A. [[0, 0, 0], [0, 0, 0]]
B. []
C. [[0, 0, 0]]
D. [[0, 0]]

Solution

  1. Step 1: Understand uniqueness requirement

    Even though multiple zeros exist, only one unique triplet [0, 0, 0] should be returned.
  2. Step 2: Check triplet formation

    Triplet [0, 0, 0] sums to zero and is valid. Duplicates must be avoided.
  3. Final Answer:

    [[0, 0, 0]] -> Option C
  4. Quick Check:

    Unique triplets = [[0,0,0]] [OK]
Hint: Return only unique triplets, avoid duplicates [OK]
Common Mistakes:
  • Returning duplicate triplets multiple times
  • Returning pairs instead of triplets
  • Returning empty list when triplets exist
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard