Hard
You have k
bags and are given a 0-indexed integer array weights
where weights[i]
represents the weight of the iᵗʰ
marble. Your task is to divide the marbles into the k
bags following these rules:
iᵗʰ
and jᵗʰ
marbles are in a bag, then all marbles with indices between i
and j
must also be in that bag.i
to j
inclusively, its cost is calculated as weights[i] + weights[j]
.The score after distributing the marbles is the sum of the costs of all k
bags.
Objective: Return the difference between the maximum and minimum scores achievable through different valid distributions of the marbles.
Example 1:
Input:
weights = [1,3,5,1], k = 2
Output:
4
Explanation:
Input:
weights = [1, 3], k = 2
Output:
0
Explanation:
https://leetcode.com/problems/put-marbles-in-bags/description/
Loading component...
Loading component...
INPUT : weights = [1,3,5,1], k = 2
OUTPUT : 4
public static void main(String[] args) {
int[] weights1 = {1, 3, 5, 1};
int k1 = 2;
System.out.println(putMarbles(weights1, k1));
int[] weights2 = {1, 3};
int k2 = 2;
System.out.println(putMarbles(weights2, k2));
} //Function End
public static long putMarbles(int[] weights, int k) {
int n = weights.length;
if (k == 1){
return 0;
}//If End
long[] pairSums = new long[n - 1];
for (int i = 0; i < n - 1; i++) {
pairSums[i] = weights[i] + weights[i + 1];
}//Loop End
Arrays.sort(pairSums);
long minScore = 0, maxScore = 0;
for (int i = 0; i < k - 1; i++) {
minScore += pairSums[i];
maxScore += pairSums[n - 2 - i];
}//Loop End
return maxScore - minScore;
} // Function End
Utility Function is not required.