📖 Scenario: You have a collection of items, each with a weight. You want to see if you can split these items into two groups so that both groups weigh the same. This is like trying to pack two bags with the same total weight.
🎯 Goal: Build a program that checks if the given list of numbers can be divided into two parts with equal sums.
📋 What You'll Learn
Create an array called nums with the exact values: [1, 5, 11, 5]
Create a variable called target that holds half of the total sum of nums
Write a function called canPartition that takes nums and target and returns true if a subset sums to target, otherwise false
Print the result of calling canPartition(nums, target)
💡 Why This Matters
🌍 Real World
This problem is like packing two bags with equal weight, useful in logistics and resource allocation.
💼 Career
Understanding subset sum problems helps in algorithm design, coding interviews, and solving optimization problems.
Progress0 / 4 steps
1
Create the number array
Create an array called nums with these exact numbers: 1, 5, 11, and 5.
DSA Typescript
Hint
Use square brackets [] to create an array and separate numbers with commas.
2
Calculate the target sum
Create a variable called target that holds half of the total sum of the numbers in nums. Use nums.reduce((a, b) => a + b, 0) to get the total sum.
DSA Typescript
Hint
Use reduce to sum all numbers, then divide by 2.
3
Write the partition check function
Write a function called canPartition that takes nums and target as parameters. Use a boolean array dp of size target + 1 to track reachable sums. Initialize dp[0] to true. For each number in nums, update dp from target down to the number, setting dp[j] to dp[j] || dp[j - num]. Return dp[target] at the end.
DSA Typescript
Hint
Use a dynamic programming array to track sums you can make. Start with dp[0] = true because sum zero is always possible.
4
Print the partition result
Print the result of calling canPartition(nums, target) using console.log.
DSA Typescript
Hint
Use console.log(canPartition(nums, target)) to show the result.
Practice
(1/5)
1. What does the Partition Equal Subset Sum problem ask you to find?
easy
A. If the array can be split into two subsets with equal sums
B. If the array contains any duplicate elements
C. If the array is sorted in ascending order
D. If the array has an even number of elements
Solution
Step 1: Understand the problem goal
The problem asks whether the given array can be divided into two parts where the sum of elements in both parts is the same.
Step 2: Clarify what is being checked
It is not about duplicates, sorting, or count of elements, but about equal sum partitioning.
Final Answer:
If the array can be split into two subsets with equal sums -> Option A
Quick Check:
Partition Equal Subset Sum = Split into equal sum subsets [OK]
Hint: Focus on equal sum subsets, not element order or duplicates [OK]
Common Mistakes:
Thinking it checks for duplicates
Confusing with sorting problems
Assuming it checks array length parity
2. Which of the following TypeScript function signatures correctly represents a function to solve Partition Equal Subset Sum?
easy
A. function canPartition(nums: boolean[]): boolean
B. function canPartition(nums: string): number
C. function canPartition(nums: number): string
D. function canPartition(nums: number[]): boolean
Solution
Step 1: Identify correct parameter type
The input is an array of numbers, so nums: number[] is correct.
Step 2: Identify correct return type
The function returns true or false, so return type is boolean.
Final Answer:
function canPartition(nums: number[]): boolean -> Option D
Quick Check:
Input array of numbers, output boolean [OK]
Hint: Input is number array, output is boolean for yes/no [OK]
Common Mistakes:
Using wrong input type like string or boolean array
Returning number instead of boolean
Incorrect function signature syntax
3. What is the output of the following TypeScript code?
function canPartition(nums: number[]): boolean {
const total = nums.reduce((a, b) => a + b, 0);
if (total % 2 !== 0) return false;
const target = total / 2;
const dp = new Array(target + 1).fill(false);
dp[0] = true;
for (const num of nums) {
for (let j = target; j >= num; j--) {
dp[j] = dp[j] || dp[j - num];
}
}
return dp[target];
}
console.log(canPartition([1, 5, 11, 5]));
medium
A. Runtime error
B. true
C. undefined
D. false
Solution
Step 1: Calculate total sum and check parity
The sum is 1+5+11+5 = 22, which is even, so continue.
Step 2: Use dynamic programming to check subset sum
The code checks if a subset sums to 11 (half of 22). The subset [11] or [5,5,1] sums to 11, so dp[11] becomes true.
Final Answer:
true -> Option B
Quick Check:
Sum even and subset exists = true [OK]
Hint: Check if half sum subset exists using dp array [OK]
Common Mistakes:
Not checking if total sum is even
Confusing dp array update direction
Assuming false because of large numbers
4. Find the bug in this TypeScript code for Partition Equal Subset Sum:
function canPartition(nums: number[]): boolean {
const total = nums.reduce((a, b) => a + b);
if (total % 2 !== 0) return false;
const target = total / 2;
const dp = new Array(target + 1).fill(false);
dp[0] = true;
for (const num of nums) {
for (let j = num; j <= target; j++) {
dp[j] = dp[j] || dp[j - num];
}
}
return dp[target];
}
medium
A. Missing initial value in reduce causes error on empty array
B. dp array size is incorrect
C. Loop direction in inner for loop should be reversed
D. No bug, code is correct
Solution
Step 1: Check reduce usage
Reduce lacks initial value, but if array is non-empty, it works. Not the main bug.
Step 2: Check inner loop direction
The inner loop runs from num to target increasing, but it should run backward from target down to num to avoid using updated dp values in the same iteration.
Final Answer:
Loop direction in inner for loop should be reversed -> Option C
Quick Check:
Inner loop must go backward to avoid dp overwrite [OK]
Hint: Inner loop for dp must run backward to prevent reuse [OK]
Common Mistakes:
Not reversing inner loop causes wrong dp updates
Assuming reduce always needs initial value
Ignoring dp array size correctness
5. Given the array [2, 2, 3, 7], which of the following subsets can be one half of the partition if the array can be split into two equal sum subsets?
hard
A. [2, 2, 3]
B. [2, 3]
C. [5]
D. [3, 5]
Solution
Step 1: Calculate total sum
Sum = 2 + 2 + 3 + 7 = 14. Half sum = 7.
Step 2: Find subset summing to 7
Check each option: A: [2,3] = 5 ≠ 7 B: [2,2,3] = 7 == 7 C: [5] = 5 ≠ 7 (5 not in array) D: [3,5] = 8 ≠ 7 (5 not in array) B works, with remaining [7] also 7.
Final Answer:
[2, 2, 3] -> Option A
Quick Check:
Sum half is 7, B sums to 7 [OK]
Hint: Sum array, find subset with half sum [OK]
Common Mistakes:
Not calculating half sum correctly
Choosing subsets that don't sum to half
Ignoring that partition may not exist
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.