📖 Scenario: You are working on a financial app that analyzes daily stock price changes. You want to find all unique sets of three days where the total price change sums to zero. This helps identify balanced periods where gains and losses cancel out.
🎯 Goal: Build a TypeScript program that finds all unique triplets in an array of integers that sum to zero.
📋 What You'll Learn
Create an array called nums with the exact values [-1, 0, 1, 2, -1, -4]
Create a variable called result to store the unique triplets
Use a sorting method to sort the nums array
Implement the three sum logic using a for loop with index i and two pointers left and right
Print the result array containing all unique triplets
💡 Why This Matters
🌍 Real World
Finding balanced periods in financial data or sets of numbers where three values sum to zero can help in risk analysis and pattern detection.
💼 Career
This problem is a classic algorithm challenge that tests array manipulation, sorting, and two-pointer techniques, common in software engineering interviews.
Progress0 / 4 steps
1
Create the initial array
Create an array called nums with these exact values: [-1, 0, 1, 2, -1, -4]
DSA Typescript
Hint
Use const nums: number[] = [...] to create the array with the exact numbers.
2
Add a variable to store results and sort the array
Create a variable called result as an empty array of number arrays, and sort the nums array in ascending order using nums.sort((a, b) => a - b)
DSA Typescript
Hint
Use const result: number[][] = [] to store triplets and nums.sort((a, b) => a - b) to sort.
3
Implement the three sum logic
Use a for loop with variable i from 0 to nums.length - 2. Inside, skip duplicates by checking nums[i] === nums[i - 1]. Use two pointers left = i + 1 and right = nums.length - 1. While left < right, calculate sum = nums[i] + nums[left] + nums[right]. If sum is zero, push [nums[i], nums[left], nums[right]] to result, then move left and right skipping duplicates. If sum < 0, increment left. If sum > 0, decrement right.
DSA Typescript
Hint
Use a for loop with i, two pointers left and right, and handle duplicates carefully.
4
Print the result array
Print the result array using console.log(result) to display all unique triplets that sum to zero.
DSA Typescript
Hint
Use console.log(result) to print the final array of triplets.
Practice
(1/5)
1. What is the main goal of the Three Sum Problem All Unique Triplets in an array of integers?
easy
A. Find the maximum sum of any three numbers
B. Find all unique triplets that sum to zero
C. Find the three largest numbers in the array
D. Find pairs of numbers that sum to zero
Solution
Step 1: Understand the problem requirement
The problem asks to find all unique sets of three numbers (triplets) in the array whose sum equals zero.
Step 2: Differentiate from other sum problems
Unlike finding pairs or maximum sums, this problem specifically looks for triplets with sum zero and no duplicates.
Final Answer:
Find all unique triplets that sum to zero -> Option B
Quick Check:
Three Sum Problem = Find 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 TypeScript function signatures correctly represents a function solving the Three Sum Problem returning all unique triplets as arrays?
easy
A. function threeSum(nums: number[]): number[][]
B. function threeSum(nums: number): number[]
C. function threeSum(nums: string[]): string[][]
D. function threeSum(nums: number[][]): number[]
Solution
Step 1: Analyze the input parameter type
The input should be an array of numbers, so nums: number[] is correct.
Step 2: Analyze the return type
The function returns an array of triplets, each triplet is an array of numbers, so number[][] is correct.
Final Answer:
function threeSum(nums: number[]): number[][] -> Option A
Quick Check:
Input array of numbers, output array of number triplets [OK]
Hint: Input array of numbers, output array of triplets [OK]
Common Mistakes:
Using wrong input type like single number or string array
Returning flat array instead of array of arrays
Confusing input and output types
3. What is the output of the following TypeScript code snippet?
const nums = [-1, 0, 1, 2, -1, -4];
function threeSum(nums: number[]): number[][] {
nums.sort((a, b) => a - b);
const result: number[][] = [];
for (let i = 0; i < nums.length - 2; i++) {
if (i > 0 && nums[i] === nums[i - 1]) continue;
let left = i + 1, right = nums.length - 1;
while (left < right) {
const sum = nums[i] + nums[left] + nums[right];
if (sum === 0) {
result.push([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 result;
}
console.log(threeSum(nums));
medium
A. [[-1, 0, 1], [0, 1, 2]]
B. [[-4, 0, 4], [-1, -1, 2]]
C. [[-1, -1, 2], [-1, 0, 1]]
D. [[0, 1, 2], [-1, -1, 2]]
Solution
Step 1: Sort the array
Sorted array is [-4, -1, -1, 0, 1, 2].
Step 2: Find unique triplets summing to zero
Triplets found are [-1, -1, 2] and [-1, 0, 1].
Final Answer:
[[-1, -1, 2], [-1, 0, 1]] -> Option C
Quick Check:
Unique triplets summing zero = [[-1,-1,2],[-1,0,1]] [OK]
Hint: Sort array, use two pointers to find triplets [OK]
Common Mistakes:
Not sorting array before processing
Including duplicate triplets
Incorrect pointer movement causing wrong sums
4. Identify the bug in the following TypeScript code for the Three Sum Problem:
function threeSum(nums: number[]): number[][] {
nums.sort((a, b) => a - b);
const result: number[][] = [];
for (let i = 0; i < nums.length - 2; i++) {
let left = i + 1, right = nums.length - 1;
while (left < right) {
const sum = nums[i] + nums[left] + nums[right];
if (sum === 0) {
result.push([nums[i], nums[left], nums[right]]);
left++;
right--;
} else if (sum < 0) {
left++;
} else {
right--;
}
}
}
return result;
}
medium
A. Missing check to skip duplicate 'i' values
B. Incorrect sorting order of the array
C. Wrong initialization of left and right pointers
D. Returning result before loop ends
Solution
Step 1: Check for duplicate skipping
The code does not skip duplicate values for index i, which can cause duplicate triplets.
Step 2: Confirm other parts are correct
Sorting is correct ascending, pointers initialized properly, and return is after loops.
Final Answer:
Missing check to skip duplicate 'i' values -> Option A
Quick Check:
Duplicate skipping for i missing = bug [OK]
Hint: Always skip duplicates for i to avoid repeated triplets [OK]
Common Mistakes:
Not skipping duplicates for i index
Skipping duplicates only for left or right pointers
Incorrect pointer initialization
5. Given the array nums = [-2, 1, 0, -1, 2, -3], which of the following is the correct set of all unique triplets that sum to zero?