BackmediumTwo PointersFlipkart

Optimal Array Partition Solution

Problem Statement

Given an array of integers weights of length n, determine the optimal partition point i that minimizes the absolute difference between the sum of weights in the left partition (0 to i-1) and the sum of weights in the right partition (i to n-1), such that the total number of elements in the two partitions is equal.

Example 1
Input
[1, 1, 3, 4, 5]
Output
2

Explanation: Step-by-step: with input [1, 1, 3, 4, 5], we first calculate the total sum of the array, which is 1 + 1 + 3 + 4 + 5 = 14. Then, we calculate the sum of the left partition (0 to 1) and the sum of the right partition (2 to 4). The sum of the left partition is 1 + 1 = 2, and the sum of the right partition is 3 + 4 + 5 = 12. The absolute difference between the sums of the two partitions is |2 - 12| = 10. We repeat this process for each possible partition point and find that the optimal partition point is indeed 2.

Example 2
Input
[1, 1, 1, 1, 1]
Output
2

Explanation: Step-by-step: with input [1, 1, 1, 1, 1], we first calculate the total sum of the array, which is 1 + 1 + 1 + 1 + 1 = 5. Then, we calculate the sum of the left partition (0 to 2) and the sum of the right partition (3 to 4). The sum of the left partition is 1 + 1 + 1 = 3, and the sum of the right partition is 1 + 1 = 2. The absolute difference between the sums of the two partitions is |3 - 2| = 1. We repeat this process for each possible partition point and find that the optimal partition point is indeed 2.

Constraints

  • 2 <= number of containers <= 100
  • 1 <= weight of each container <= 1000
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

Optimal Array Partition — Problem Statement & Solution Guide

Two PointersMediumMixed
TimeO(n)
|
SpaceO(1)

Problem Description

Given an array of integers weights of length n, determine the optimal partition point i that minimizes the absolute difference between the sum of weights in the left partition (0 to i-1) and the sum of weights in the right partition (i to n-1), such that the total number of elements in the two partitions is equal.

Examples

Example 1

Input

[1, 1, 3, 4, 5]

Output

2

Explanation: Step-by-step: with input [1, 1, 3, 4, 5], we first calculate the total sum of the array, which is 1 + 1 + 3 + 4 + 5 = 14. Then, we calculate the sum of the left partition (0 to 1) and the sum of the right partition (2 to 4). The sum of the left partition is 1 + 1 = 2, and the sum of the right partition is 3 + 4 + 5 = 12. The absolute difference between the sums of the two partitions is |2 - 12| = 10. We repeat this process for each possible partition point and find that the optimal partition point is indeed 2.

Example 2

Input

[1, 1, 1, 1, 1]

Output

2

Explanation: Step-by-step: with input [1, 1, 1, 1, 1], we first calculate the total sum of the array, which is 1 + 1 + 1 + 1 + 1 = 5. Then, we calculate the sum of the left partition (0 to 2) and the sum of the right partition (3 to 4). The sum of the left partition is 1 + 1 + 1 = 3, and the sum of the right partition is 1 + 1 = 2. The absolute difference between the sums of the two partitions is |3 - 2| = 1. We repeat this process for each possible partition point and find that the optimal partition point is indeed 2.

Constraints

  • 2 <= number of containers <= 100
  • 1 <= weight of each container <= 1000

Optimal Approach & Strategy

The optimal approach involves using a two-pointer technique to find the optimal partition point in linear time, resulting in a time complexity of O(n). This approach iterates over the array of weights, maintaining a running sum of the weights on the left and right sides of the partition point.

Brute Force Approach

The brute-force approach involves iterating over all possible partition points and calculating the absolute difference in total weight for each point, resulting in a time complexity of O(n²). This approach is inefficient for large inputs. The naive approach would also involve checking all possible subsets of containers to find the optimal partition.

Verified Code Solutions

JavaScript Solution
Time: O(n)
function optimalPartition(weights) {
    let n = weights.length;
    if (n === 0) return 0;
    let totalSum = weights.reduce((a, b) => a + b, 0);
    let partitionPoint = Math.floor(n / 2);
    let leftSum = weights.slice(0, partitionPoint).reduce((a, b) => a + b, 0);
    let rightSum = totalSum - leftSum;
    let minDiff = Math.abs(leftSum - rightSum);
    for (let i = partitionPoint + 1; i < n; i++) {
        leftSum = weights.slice(0, i).reduce((a, b) => a + b, 0);
        rightSum = totalSum - leftSum;
        let diff = Math.abs(leftSum - rightSum);
        if (diff < minDiff) {
            minDiff = diff;
            partitionPoint = i;
        }
    }
    return partitionPoint;
}

Asked in Top Tech Interviews

Flipkart

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.