Put Marbles in Bags - Problem

You have k bags. You are given a 0-indexed integer array weights where weights[i] is the weight of the ith marble. You are also given the integer k.

Divide the marbles into the k bags according to the following rules:

  • No bag is empty.
  • If the ith marble and jth marble are in a bag, then all marbles with an index between the ith and jth indices should also be in that same bag.
  • If a bag consists of all the marbles with an index from i to j inclusively, then the cost of the bag is weights[i] + weights[j].

The score after distributing the marbles is the sum of the costs of all the k bags.

Return the difference between the maximum and minimum scores among marble distributions.

Input & Output

Example 1 — Basic Case
$ Input: weights = [1,3,5,1], k = 2
Output: 4
💡 Note: Two bags needed. Min score: [1,3] + [5,1] = (1+3) + (5+1) = 10. Max score: [1] + [3,5,1] = (1+1) + (3+1) = 6. Difference = 10-6 = 4.
Example 2 — Three Bags
$ Input: weights = [1,3], k = 2
Output: 0
💡 Note: Only one way to split into 2 bags: [1] + [3]. Cost = (1+1) + (3+3) = 8. Since only one arrangement exists, difference is 0.
Example 3 — Larger Array
$ Input: weights = [1,3,5,1,2], k = 3
Output: 7
💡 Note: Need 3 bags. Different cuts create different total scores. The difference between maximum and minimum possible scores is 7.

Constraints

  • 1 ≤ k ≤ weights.length ≤ 105
  • 1 ≤ weights[i] ≤ 109

Visualization

Tap to expand
Put Marbles in Bags - Greedy Approach INPUT weights array: 1 i=0 3 i=1 5 i=2 1 i=3 Marbles (visual): 1 3 5 1 Input Values: weights = [1,3,5,1] k = 2 bags Adjacent pairs form edges (1+3), (3+5), (5+1) = 4, 8, 6 ALGORITHM STEPS 1 Compute Edge Pairs pairs[i] = w[i] + w[i+1] [4, 8, 6] 2 Sort Edge Pairs Ascending order [4, 6, 8] 3 Select k-1 Edges Min: smallest k-1 = [4] Max: largest k-1 = [8] 4 Compute Difference maxSum - minSum 8 - 4 = 4 Sorted Pairs 4 MIN 6 8 MAX Pick k-1 = 1 edge FINAL RESULT Minimum Score Distribution Bag 1 1 3 Bag 2 5 1 Cost: (1+3)+(5+1) = 10 Maximum Score Distribution Bag 1 1 3 5 Bag 2 1 Cost: (1+5)+(1+1) = 14 OUTPUT Max - Min = 14 - 10 = 4 Key Insight: The score difference depends ONLY on which edges (adjacent pairs) we choose to split. First + last elements always contribute to total. We need k-1 split points from n-1 possible edges. Greedy: Sort edge costs, pick smallest k-1 for min, largest k-1 for max. Difference = sum(top k-1) - sum(bottom k-1). TutorialsPoint - Put Marbles in Bags | Greedy - Sort Edge Pairs by Contribution Time: O(n log n) | Space: O(n)
Asked in
Google 15 Amazon 12 Microsoft 8
28.5K Views
Medium Frequency
~35 min Avg. Time
847 Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen