📖 Scenario: You are working on a shopping app that suggests combinations of four products whose prices add up to a customer's gift card value. To help the app, you need to find all unique sets of four product prices that sum to the gift card amount.
🎯 Goal: Build a Python program that finds all unique quadruplets in a list of integers that sum up to a given target value.
📋 What You'll Learn
Create a list called nums with the exact values: [1, 0, -1, 0, -2, 2]
Create an integer variable called target and set it to 0
Write a function called four_sum that takes nums and target as parameters and returns a list of unique quadruplets that sum to target
Print the result of calling four_sum(nums, target)
💡 Why This Matters
🌍 Real World
Finding combinations of products or items that meet a specific budget or target sum is common in shopping apps, budgeting tools, and financial planning software.
💼 Career
Understanding how to find unique combinations in data sets is useful for software engineers working on recommendation systems, data analysis, and algorithm optimization.
Progress0 / 4 steps
1
Create the list of numbers
Create a list called nums with these exact values: [1, 0, -1, 0, -2, 2]
DSA Python
Hint
Use square brackets to create the list and separate numbers with commas.
2
Set the target sum
Create an integer variable called target and set it to 0
DSA Python
Hint
Use a simple assignment to create the variable.
3
Write the function to find unique quadruplets
Write a function called four_sum that takes nums and target as parameters and returns a list of unique quadruplets that sum to target. Use sorting and two pointers inside nested loops to find quadruplets without duplicates.
DSA Python
Hint
Sort the list first. Use two nested loops for the first two numbers, then use two pointers to find the other two numbers. Skip duplicates to avoid repeated quadruplets.
4
Print the result of the function
Print the result of calling four_sum(nums, target)
DSA Python
Hint
Use print(four_sum(nums, target)) to show the result.
Practice
(1/5)
1. What is the main goal of the Four Sum Problem in data structures and algorithms?
easy
A. Find all unique quadruplets in an array that sum up to a target value
B. Sort the array in ascending order
C. Find the maximum element in the array
D. Count the number of pairs that sum to a target
Solution
Step 1: Understand the problem statement
The Four Sum Problem asks to find all unique sets of four numbers (quadruplets) in an array that add up to a given target sum.
Step 2: Identify the goal
The goal is not sorting or counting pairs but to find quadruplets with a specific sum without duplicates.
Final Answer:
Find all unique quadruplets in an array that sum up to a target value -> Option A
Quick Check:
Four Sum = unique quadruplets summing to target [OK]
Hint: Look for four numbers adding to target, no duplicates [OK]
Common Mistakes:
Confusing Four Sum with Two Sum or Three Sum problems
Thinking the problem is about sorting or counting pairs
Ignoring the uniqueness of quadruplets
2. Which of the following Python code snippets correctly initializes an empty list to store quadruplets for the Four Sum problem?
easy
A. quadruplets = ()
B. quadruplets = []
C. quadruplets = {}
D. quadruplets = set()
Solution
Step 1: Identify the correct data structure for storing multiple quadruplets
Quadruplets are multiple groups of four numbers, so a list is suitable to store them.
Step 2: Check the initialization syntax
Using [] initializes an empty list, which is correct. Curly braces {} create a dictionary, parentheses () create a tuple, and set() creates a set which is unordered and not ideal here.
Final Answer:
quadruplets = [] -> Option B
Quick Check:
Empty list for quadruplets = [] [OK]
Hint: Use [] to store multiple quadruplets in a list [OK]
Common Mistakes:
Using {} which creates a dictionary, not a list
Using () which creates an immutable tuple
Using set() which is unordered and may lose duplicates
3. What will be the output of the following Python code snippet for the Four Sum problem?
nums = [1, 0, -1, 0, -2, 2]
target = 0
# After sorting
nums.sort()
quadruplets = []
for i in range(len(nums)-3):
for j in range(i+1, len(nums)-2):
left, right = j+1, len(nums)-1
while left < right:
total = nums[i] + nums[j] + nums[left] + nums[right]
if total == target:
quadruplets.append([nums[i], nums[j], nums[left], nums[right]])
left += 1
right -= 1
elif total < target:
left += 1
else:
right -= 1
print(quadruplets)
medium
A. [[-2, -1, 0, 1], [-1, 0, 0, 1]]
B. [[1, 0, -1, 0], [-2, 2, -1, 1]]
C. [[-2, -1, 1, 2], [-2, 0, 0, 2], [-1, 0, 0, 1]]
D. []
Solution
Step 1: Sort the array and understand the loops
Sorted nums = [-2, -1, 0, 0, 1, 2]. The nested loops and two-pointer approach check all quadruplets summing to target 0.
Step 2: Identify quadruplets that sum to zero
Valid quadruplets are [-2, -1, 1, 2], [-2, 0, 0, 2], and [-1, 0, 0, 1]. These are appended to quadruplets list.
Hint: Sort array, use two pointers inside nested loops [OK]
Common Mistakes:
Not sorting the array before processing
Missing some quadruplets due to pointer errors
Appending duplicates without checks
4. Identify the bug in the following code snippet for the Four Sum problem and select the correct fix.
nums = [2, 2, 2, 2, 2]
target = 8
nums.sort()
quadruplets = []
for i in range(len(nums)-3):
for j in range(i+1, len(nums)-2):
left, right = j+1, len(nums)-1
while left < right:
total = nums[i] + nums[j] + nums[left] + nums[right]
if total == target:
quadruplets.append([nums[i], nums[j], nums[left], nums[right]])
left += 1
right -= 1
elif total < target:
left += 1
else:
right -= 1
print(quadruplets)
medium
A. Add checks to skip duplicates for i, j, left, and right indices
B. Change quadruplets to a set to avoid duplicates
C. Remove sorting to improve performance
D. Replace while loop with a for loop
Solution
Step 1: Identify the problem with duplicates
The code appends quadruplets but does not skip duplicates, so it will add the same quadruplet multiple times.
Step 2: Fix by skipping duplicates
Adding checks to skip duplicate values for i, j, left, and right indices after finding a quadruplet prevents repeated quadruplets.
Final Answer:
Add checks to skip duplicates for i, j, left, and right indices -> Option A