装满石头的背包的最大数量
题目描述
现有编号从 0
到 n - 1
的 n
个背包。给你两个下标从 0 开始的整数数组 capacity
和 rocks
。第 i
个背包最大可以装 capacity[i]
块石头,当前已经装了 rocks[i]
块石头。另给你一个整数 additionalRocks
,表示你可以放置的额外石头数量,石头可以往 任意 背包中放置。
请你将额外的石头放入一些背包中,并返回放置后装满石头的背包的 最大 数量。
题目分析
要把 additionalRocks
块石头放在 capacity.length
个背包里面,使得背包装满石头数量最多。
capacity(最多可装) | rocks(已装) |
---|---|
2 | 1 |
3 | 2 |
4 | 4 |
5 | 4 |
第一步:算出所有背包剩余可装数量是多少。
capacity(最多可装) | rocks(已装) | remainders(剩余可装) |
---|---|---|
2 | 1 | 1 |
3 | 2 | 1 |
4 | 4 | 0 |
5 | 4 | 1 |
第二步,把剩余可装数量排序,排序后的结果为[0,1,1,1]
。
第三步,遍历remainders
数组,把数值相加为sum
,直到sum
的值大于additionalRocks
。
题解
/**
* @param {number[]} capacity
* @param {number[]} rocks
* @param {number} additionalRocks
* @return {number}
*/
var maximumBags = function (capacity, rocks, additionalRocks) {
let remainders = [];
for (let i = 0; i < capacity.length; i++) {
remainders.push(capacity[i] - rocks[i]);
}
let sum = 0;
remainders = remainders.sort((a, b) => {
return a - b;
});
let maxBags = remainders.length;
for (let i = 0; i < remainders.length; i++) {
sum += remainders[i];
if (sum > additionalRocks) {
maxBags = i;
break;
}
}
return maxBags;
};