BackmediumArraysInfosysSwiggy

Balance Array Partition Solution

Problem Statement

You are given an array of integers representing the mass of distinct objects. Your task is to determine the maximum possible total mass that can be assigned to a subset of these objects such that the sum of masses at even indices (0-based) in the original array equals the sum of masses at odd indices.

Specifically, you may choose to include or exclude each element from the 'even-indexed sum' and 'odd-indexed sum' independently, but the final partition must satisfy the condition that the sum of selected elements at even positions equals the sum of selected elements at odd positions. The goal is to maximize the total weight of the selected elements (i.e., the sum of all chosen elements from both even and odd indices).

Return the maximum total weight achievable under this balance condition. If no non-empty subset satisfies the balance condition, return 0.

Example 1
Input
weights = [1, 2, 3, 4]
Output
6

Explanation: Even indices: 0 (val=1), 2 (val=3). Odd indices: 1 (val=2), 3 (val=4). We need sum_even_selected == sum_odd_selected. Maximize total = sum_even_selected + sum_odd_selected. Try selecting even: {1,3} sum=4, odd: {2,4} sum=6 -> not equal. Try even: {3} sum=3, odd: {2,4} sum=6 -> no. Try even: {1,3} sum=4, odd: {4} sum=4 -> equal. Total = 4+4=8? Wait, re-evaluate: The problem says 'sum of weights at even indices equals sum at odd indices' for the selected subset. Let's re-read carefully. Actually, the standard interpretation for 'Balance Array Partition' in this context usually implies partitioning the entire array or selecting a subset where the sums balance. Let's assume the goal is to select a subset S such that sum(S_even) == sum(S_odd). Maximize sum(S). For [1,2,3,4]: Select even indices {0,2} -> sum=4. Select odd indices {1,3} -> sum=6. Not equal. Select even {2} -> 3. Select odd {1} -> 2. No. Select even {0,2} -> 4. Select odd {3} -> 4. Equal. Total selected = 1+3+4 = 8. Wait, is 8 the max? What about even {0} -> 1, odd {1} -> 2. No. Even {2} -> 3, odd {1} -> 2. No. Even {0,2} -> 4, odd {1,3} -> 6. No. Even {0} -> 1, odd {3} -> 4. No. Even {2} -> 3, odd {3} -> 4. No. So max is 8? Let's check another combo. Even {0,2} sum=4. Odd {3} sum=4. Total=8. Is there a larger one? Even sum max is 4. Odd sum max is 6. If we pick even sum=4, we need odd sum=4. Max odd sum <=4 is 4 (element 4). So total 8. If we pick even sum=3, need odd sum=3. Max odd sum <=3 is 2 (element 2) or 2+? No, 2 is max single. 2!=3. If even sum=1, need odd sum=1. No odd element is 1. So 8 is correct.

Example 2
Input
weights = [5, 5, 5, 5]
Output
20

Explanation: Even indices: 0 (5), 2 (5). Odd indices: 1 (5), 3 (5). Select all even: sum=10. Select all odd: sum=10. Sums are equal. Total selected weight = 10 + 10 = 20.

Example 3
Input
weights = [1, 1, 1, 1, 1]
Output
4

Explanation: Even indices: 0 (1), 2 (1), 4 (1). Odd indices: 1 (1), 3 (1). We need sum_even == sum_odd. Max even sum is 3. Max odd sum is 2. To balance, we can pick even sum=2 (e.g., indices 0,2) and odd sum=2 (indices 1,3). Total = 2+2=4. Can we get higher? If even sum=3, need odd sum=3, but max odd is 2. If even sum=1, need odd sum=1, total=2. So max is 4.

Example 4
Input
weights = [10, 1, 1, 10]
Output
20

Explanation: Even indices: 0 (10), 2 (1). Odd indices: 1 (1), 3 (10). Select even: {0} sum=10. Select odd: {3} sum=10. Sums equal. Total = 10+10=20. Other options: even {0,2} sum=11, need odd sum=11 (max 11? 1+10=11). Yes, odd {1,3} sum=11. Total=11+11=22. Wait, 10+1=11, 1+10=11. Total 22. Is 22 valid? Yes. So output should be 22.

Constraints

  • 1 <= weights.length <= 10^5
  • 1 <= weights[i] <= 10^4
  • The sum of weights at even indices and odd indices can be up to 10^9
  • Time complexity should be O(n * max_sum) or better, where max_sum is the maximum possible sum of one side
Live Compiler1 Free Run Available
Loading Editor...
Test Cases & Output
Click "Run" to test your 1 free compile trial!

🚀 Practice this problem

Run code, get AI hints & track streak

Sign Up Free

Balance Array Partition — Problem Statement & Solution Guide

ArraysMediumPrefix sum and observation
TimeO(n * S)
|
SpaceO(S)

Problem Description

You are given an array of integers representing the mass of distinct objects. Your task is to determine the maximum possible total mass that can be assigned to a subset of these objects such that the sum of masses at even indices (0-based) in the original array equals the sum of masses at odd indices.

Specifically, you may choose to include or exclude each element from the 'even-indexed sum' and 'odd-indexed sum' independently, but the final partition must satisfy the condition that the sum of selected elements at even positions equals the sum of selected elements at odd positions. The goal is to maximize the total weight of the selected elements (i.e., the sum of all chosen elements from both even and odd indices).

Return the maximum total weight achievable under this balance condition. If no non-empty subset satisfies the balance condition, return 0.

DSA Pattern Breakdown

DSA Pattern Breakdown

"Balance Array Partition"

medium

WHY DOES IT MATTER?

This pattern is essential because it combines subset sum with parity constraints, a common scenario in resource allocation and load balancing. It tests the ability to transform a constrained optimization problem into a standard DP problem.

OPTIMIZATION CHALLENGE

The key insight is to negate the values at odd indices and find a subset that sums to zero. This reduces the problem to a standard subset sum variant, allowing the use of efficient DP techniques.

REAL-WORLD CONNECTION

Analogous to balancing electrical loads in a grid where generators at even positions must match the load at odd positions, or in financial trading where long and short positions must be balanced to minimize risk.

Always check if the total sum of even-indexed elements equals the total sum of odd-indexed elements. If not, the answer is 0. This early termination saves significant computation time.

COMPLEXITY AT A GLANCE

⏱ Time:O(n * S)
💾 Space:O(S)

Core Theory — Why This Approach?

The problem 'Balance Array Partition' is a variation of the classic Subset Sum problem, specifically tailored to arrays with parity-based constraints. The core challenge is to select a subset of elements such that the sum of selected elements at even indices equals the sum of selected elements at odd indices. This can be rephrased as finding a subset where the difference between the sum of selected even-indexed elements and the sum of selected odd-indexed elements is zero. This transforms the problem into a variant of the Partition Equal Subset Sum, where we are looking for a subset with a target sum of 0 from a modified set of values (where odd-indexed values are negated).

Interview Questions on This Problem

Q1At a fintech platform, you need to balance transaction fees across two processing nodes. Given an array of fee amounts, how would you ensure the total fees assigned to Node A (even indices) equal those assigned to Node B (odd indices) while maximizing the total processed volume? Explain your approach and complexity.

I would model this as a subset sum problem where I negate the values at odd indices. The goal is to find a subset of these modified values that sums to zero. I would use dynamic programming with a boolean array or bitset to track achievable sums. The time complexity would be O(n * S) where S is the maximum possible sum, and space is O(S). This ensures we maximize the total mass (sum of selected elements) while maintaining the balance constraint.

Q2In a high-growth startup's logistics system, you need to assign packages to two trucks. The constraint is that the weight of packages at even positions in the input list assigned to Truck 1 must equal the weight of packages at odd positions assigned to Truck 2. How do you optimize for maximum total weight transported?

I would treat the even-indexed weights as positive and odd-indexed weights as negative. The problem reduces to finding a subset of these signed weights that sums to zero. I would use a DP approach where dp[i][j] represents whether a sum j is achievable using the first i elements. To maximize total weight, I would track the maximum sum of original values for each achievable difference. The key is to handle the sign flip correctly and ensure the DP state captures both the difference and the total mass.

Q3At a global product company, you are designing a load balancer that distributes requests based on a weighted array. The system requires that the sum of weights at even indices assigned to Server A equals the sum of weights at odd indices assigned to Server B. How would you handle large input sizes where the sum of weights is very large?

For large sums, standard DP might be too slow. I would consider using a bitset to optimize space and time, or meet-in-the-middle if n is small. If the sum is extremely large, I might need to use a hash set to store achievable differences, but this could lead to O(2^n) in the worst case. In practice, I would first check if the total sum of even and odd indices are equal; if not, no solution exists. If they are, I would use a DP approach with a bitset to efficiently track achievable sums.

Examples

Example 1

Input

weights = [1, 2, 3, 4]

Output

6

Explanation: Even indices: 0 (val=1), 2 (val=3). Odd indices: 1 (val=2), 3 (val=4). We need sum_even_selected == sum_odd_selected. Maximize total = sum_even_selected + sum_odd_selected. Try selecting even: {1,3} sum=4, odd: {2,4} sum=6 -> not equal. Try even: {3} sum=3, odd: {2,4} sum=6 -> no. Try even: {1,3} sum=4, odd: {4} sum=4 -> equal. Total = 4+4=8? Wait, re-evaluate: The problem says 'sum of weights at even indices equals sum at odd indices' for the selected subset. Let's re-read carefully. Actually, the standard interpretation for 'Balance Array Partition' in this context usually implies partitioning the entire array or selecting a subset where the sums balance. Let's assume the goal is to select a subset S such that sum(S_even) == sum(S_odd). Maximize sum(S). For [1,2,3,4]: Select even indices {0,2} -> sum=4. Select odd indices {1,3} -> sum=6. Not equal. Select even {2} -> 3. Select odd {1} -> 2. No. Select even {0,2} -> 4. Select odd {3} -> 4. Equal. Total selected = 1+3+4 = 8. Wait, is 8 the max? What about even {0} -> 1, odd {1} -> 2. No. Even {2} -> 3, odd {1} -> 2. No. Even {0,2} -> 4, odd {1,3} -> 6. No. Even {0} -> 1, odd {3} -> 4. No. Even {2} -> 3, odd {3} -> 4. No. So max is 8? Let's check another combo. Even {0,2} sum=4. Odd {3} sum=4. Total=8. Is there a larger one? Even sum max is 4. Odd sum max is 6. If we pick even sum=4, we need odd sum=4. Max odd sum <=4 is 4 (element 4). So total 8. If we pick even sum=3, need odd sum=3. Max odd sum <=3 is 2 (element 2) or 2+? No, 2 is max single. 2!=3. If even sum=1, need odd sum=1. No odd element is 1. So 8 is correct.

Example 2

Input

weights = [5, 5, 5, 5]

Output

20

Explanation: Even indices: 0 (5), 2 (5). Odd indices: 1 (5), 3 (5). Select all even: sum=10. Select all odd: sum=10. Sums are equal. Total selected weight = 10 + 10 = 20.

Example 3

Input

weights = [1, 1, 1, 1, 1]

Output

4

Explanation: Even indices: 0 (1), 2 (1), 4 (1). Odd indices: 1 (1), 3 (1). We need sum_even == sum_odd. Max even sum is 3. Max odd sum is 2. To balance, we can pick even sum=2 (e.g., indices 0,2) and odd sum=2 (indices 1,3). Total = 2+2=4. Can we get higher? If even sum=3, need odd sum=3, but max odd is 2. If even sum=1, need odd sum=1, total=2. So max is 4.

Example 4

Input

weights = [10, 1, 1, 10]

Output

20

Explanation: Even indices: 0 (10), 2 (1). Odd indices: 1 (1), 3 (10). Select even: {0} sum=10. Select odd: {3} sum=10. Sums equal. Total = 10+10=20. Other options: even {0,2} sum=11, need odd sum=11 (max 11? 1+10=11). Yes, odd {1,3} sum=11. Total=11+11=22. Wait, 10+1=11, 1+10=11. Total 22. Is 22 valid? Yes. So output should be 22.

Constraints

  • 1 <= weights.length <= 10^5
  • 1 <= weights[i] <= 10^4
  • The sum of weights at even indices and odd indices can be up to 10^9
  • Time complexity should be O(n * max_sum) or better, where max_sum is the maximum possible sum of one side

Optimal Approach & Strategy

Negate the values at odd indices and use dynamic programming to find a subset that sums to zero. Use a boolean array or bitset to track achievable sums, and maximize the total original mass for each achievable difference.

Brute Force Approach

Iterate through all 2^n subsets of the array, calculate the sum of selected even-indexed elements and the sum of selected odd-indexed elements, and check if they are equal. Track the maximum total mass among valid subsets.

Verified Code Solutions

JavaScript Solution
Time: O(n * S)
function balanceArrayPartition(weights) {
    const n = weights.length;
    if (n === 0) return 0;
    
    // Separate even and odd indexed elements
    const even = [];
    const odd = [];
    for (let i = 0; i < n; i++) {
        if (i % 2 === 0) even.push(weights[i]);
        else odd.push(weights[i]);
    }
    
    // Compute all possible subset sums
    const evenSums = new Set([0]);
    const oddSums = new Set([0]);
    
    for (const w of even) {
        const newSums = [];
        for (const s of evenSums) {
            newSums.push(s + w);
        }
        for (const s of newSums) {
            evenSums.add(s);
        }
    }
    
    for (const w of odd) {
        const newSums = [];
        for (const s of oddSums) {
            newSums.push(s + w);
        }
        for (const s of newSums) {
            oddSums.add(s);
        }
    }
    
    // Find the maximum common sum
    let maxCommonSum = 0;
    for (const s of evenSums) {
        if (oddSums.has(s)) {
            maxCommonSum = Math.max(maxCommonSum, s);
        }
    }
    
    return 2 * maxCommonSum;
}

// Driver code
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    terminal: false
});

let lines = [];
rl.on('line', line => lines.push(line));
rl.on('close', () => {
    const n = parseInt(lines[0]);
    const weights = lines[1].split(' ').map(Number);
    console.log(balanceArrayPartition(weights));
});

Asked in Top Tech Interviews

InfosysSwiggy

Solve in Interative Editor

Ready to test your code? Open our built-in compiler, run custom test suites, and see detailed complexity analysis reports instantly.