📖 Scenario: You are working on a financial app that analyzes transactions. You want to find all unique sets of three transactions that sum up to zero. This helps detect suspicious patterns where gains and losses cancel out.
🎯 Goal: Build a Java program that finds all unique triplets in an integer array whose sum is zero. The program should print each triplet in ascending order.
📋 What You'll Learn
Create an integer array called nums with the exact values: -1, 0, 1, 2, -1, -4
Create an integer variable called n that stores the length of nums
Implement the core logic using a for loop with index i to find all unique triplets that sum to zero
Print each unique triplet on its own line in the format: [a, b, c] where a <= b <= c
💡 Why This Matters
🌍 Real World
Finding sets of transactions or numbers that balance out to zero is useful in fraud detection, financial reconciliation, and error checking.
💼 Career
This problem is a common interview question testing array manipulation, sorting, and two-pointer techniques, important for software engineering roles.
Progress0 / 4 steps
1
Create the integer array
Create an integer array called nums with these exact values: -1, 0, 1, 2, -1, -4
DSA Java
Hint
Use int[] nums = { ... }; to create the array with the exact values.
2
Create the length variable
Create an integer variable called n that stores the length of the array nums
DSA Java
Hint
Use nums.length to get the array size.
3
Implement the core logic to find unique triplets
Sort the array nums. Then use a for loop with index i from 0 to n - 3. Inside, use two pointers left and right to find all unique triplets that sum to zero. Store each unique triplet in a list of lists called result.
DSA Java
Hint
Sort the array first. Use a for loop with i. Use two pointers left and right to find triplets. Skip duplicates.
4
Print all unique triplets
After finding all unique triplets in result, use a for loop to print each triplet on its own line in the format: [a, b, c]
DSA Java
Hint
Use a for-each loop to print each triplet in result. Each triplet prints as a list like [a, b, c].
Practice
(1/5)
1. What is the main goal of the Three Sum Problem in data structures and algorithms?
easy
A. Sort the array in ascending order
B. Find the maximum sum of any three elements
C. Find all unique triplets in an array that sum to zero
D. Count the number of pairs that sum to zero
Solution
Step 1: Understand the problem statement
The Three Sum Problem asks to find all unique sets of three numbers in an array whose sum is zero.
Step 2: Identify the goal
The goal is to find triplets (three numbers) that add up exactly to zero without duplicates.
Final Answer:
Find all unique triplets in an array that sum to zero -> Option C
Quick Check:
Three Sum Problem = Find triplets summing to zero [OK]
Hint: Look for three numbers adding to zero without repeats [OK]
Common Mistakes:
Thinking it finds pairs instead of triplets
Assuming it sorts the array only
Looking for maximum sum instead of zero sum
2. Which of the following Java code snippets correctly initializes an array to be used for solving the Three Sum Problem?
easy
A. int[] nums = (-1, 0, 1, 2, -1, -4);
B. int nums = {-1, 0, 1, 2, -1, -4};
C. int nums[] = new int(-1, 0, 1, 2, -1, -4);
D. int[] nums = new int[]{-1, 0, 1, 2, -1, -4};
Solution
Step 1: Check Java array initialization syntax
In Java, arrays are initialized with new int[]{...} or directly with curly braces during declaration.
Step 2: Validate each option
int[] nums = new int[]{-1, 0, 1, 2, -1, -4}; uses correct syntax: int[] nums = new int[]{-1, 0, 1, 2, -1, -4};. Others have syntax errors.
Final Answer:
int[] nums = new int[]{-1, 0, 1, 2, -1, -4}; -> Option D
Hint: Use new int[]{...} to initialize arrays in Java [OK]
Common Mistakes:
Using parentheses instead of braces
Missing 'new' keyword
Declaring array without type
3. What will be the output of the following Java code snippet that attempts to find unique triplets summing to zero?
import java.util.*;
public class ThreeSum {
public static List threeSum(int[] nums) {
List res = new ArrayList<>();
Arrays.sort(nums);
for (int i = 0; i < nums.length - 2; i++) {
if (i > 0 && nums[i] == nums[i - 1]) continue;
int left = i + 1, right = nums.length - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
if (sum == 0) {
res.add(Arrays.asList(nums[i], nums[left], nums[right]));
while (left < right && nums[left] == nums[left + 1]) left++;
while (left < right && nums[right] == nums[right - 1]) right--;
left++; right--;
} else if (sum < 0) left++;
else right--;
}
}
return res;
}
public static void main(String[] args) {
int[] nums = {-1, 0, 1, 2, -1, -4};
System.out.println(threeSum(nums));
}
}
medium
A. [[-1, -1, 2], [-1, 0, 1]]
B. [[0, 1, 2], [-1, -1, 2]]
C. [[-4, 2, 2], [-1, 0, 1]]
D. [[-1, 0, 1], [0, 1, 2]]
Solution
Step 1: Sort and iterate through the array
The array after sorting is [-4, -1, -1, 0, 1, 2]. The code skips duplicates and uses two pointers to find triplets summing to zero.
Step 2: Identify unique triplets summing to zero
Triplets found are [-1, -1, 2] and [-1, 0, 1]. These are added to the result list.
Hint: Sort array, use two pointers to find zero sum triplets [OK]
Common Mistakes:
Not sorting array before two-pointer approach
Including duplicate triplets
Incorrect pointer movement causing wrong sums
4. Identify the bug in the following Java code snippet for the Three Sum Problem and select the correct fix:
public List threeSum(int[] nums) {
List res = new ArrayList<>();
Arrays.sort(nums);
for (int i = 0; i < nums.length - 2; i++) {
if (nums[i] == nums[i + 1]) continue;
int left = i + 1, right = nums.length - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
if (sum == 0) {
res.add(Arrays.asList(nums[i], nums[left], nums[right]));
left++;
right--;
} else if (sum < 0) left++;
else right--;
}
}
return res;
}
medium
A. Remove the sorting step Arrays.sort(nums);
B. Change if (nums[i] == nums[i + 1]) continue; to if (i > 0 && nums[i] == nums[i - 1]) continue;
C. Change while (left < right) to while (left <= right)
D. Add left++ and right-- after the while loop
Solution
Step 1: Identify the duplicate skipping condition
The code incorrectly checks nums[i] == nums[i + 1] which can cause index out of bounds and wrong duplicate skipping.
Step 2: Correct duplicate skipping logic
The correct check is if (i > 0 && nums[i] == nums[i - 1]) continue; to skip duplicates properly without errors.
Final Answer:
Change if (nums[i] == nums[i + 1]) continue; to if (i > 0 && nums[i] == nums[i - 1]) continue; -> Option B
Quick Check:
Proper duplicate skip check = Change if (nums[i] == nums[i + 1]) continue; to if (i > 0 && nums[i] == nums[i - 1]) continue; [OK]
Hint: Skip duplicates by comparing current with previous element [OK]
Common Mistakes:
Checking next element instead of previous for duplicates