class Solution {
public:
int maximumBags(vector<int>& capacity, vector<int>& rocks, int additionalRocks) {
}
};
2279. 装满石头的背包的最大数量
现有编号从 0
到 n - 1
的 n
个背包。给你两个下标从 0 开始的整数数组 capacity
和 rocks
。第 i
个背包最大可以装 capacity[i]
块石头,当前已经装了 rocks[i]
块石头。另给你一个整数 additionalRocks
,表示你可以放置的额外石头数量,石头可以往 任意 背包中放置。
请你将额外的石头放入一些背包中,并返回放置后装满石头的背包的 最大 数量。
示例 1:
输入:capacity = [2,3,4,5], rocks = [1,2,4,4], additionalRocks = 2 输出:3 解释: 1 块石头放入背包 0 ,1 块石头放入背包 1 。 每个背包中的石头总数是 [2,3,4,4] 。 背包 0 、背包 1 和 背包 2 都装满石头。 总计 3 个背包装满石头,所以返回 3 。 可以证明不存在超过 3 个背包装满石头的情况。 注意,可能存在其他放置石头的方案同样能够得到 3 这个结果。
示例 2:
输入:capacity = [10,2,2], rocks = [2,2,0], additionalRocks = 100 输出:3 解释: 8 块石头放入背包 0 ,2 块石头放入背包 2 。 每个背包中的石头总数是 [10,2,2] 。 背包 0 、背包 1 和背包 2 都装满石头。 总计 3 个背包装满石头,所以返回 3 。 可以证明不存在超过 3 个背包装满石头的情况。 注意,不必用完所有的额外石头。
提示:
n == capacity.length == rocks.length
1 <= n <= 5 * 104
1 <= capacity[i] <= 109
0 <= rocks[i] <= capacity[i]
1 <= additionalRocks <= 109
原站题解
python3 解法, 执行用时: 148 ms, 内存消耗: 22.1 MB, 提交时间: 2022-11-27 11:41:53
class Solution:def maximumBags(self, capacity: List[int], rocks: List[int], additionalRocks: int) -> int:n = len(capacity)rest = [0] * nfor i in range(n):rest[i] = capacity[i] - rocks[i]rest.sort()ans = 0i = 0while additionalRocks > 0 and i < n:if rest[i] <= additionalRocks:additionalRocks -= rest[i]ans += 1i += 1return ans
golang 解法, 执行用时: 136 ms, 内存消耗: 7.9 MB, 提交时间: 2022-11-27 11:41:25
func maximumBags(capacity, rocks []int, additionalRocks int) (ans int) {for i := range capacity {capacity[i] -= rocks[i]}sort.Ints(capacity) // 先装剩余最小的for _, leftSpace := range capacity {if leftSpace > additionalRocks { // 无法装满,那后续也无法装满(因为排序了)break // 直接退出}ans++additionalRocks -= leftSpace}return}
java 解法, 执行用时: 13 ms, 内存消耗: 52.7 MB, 提交时间: 2022-11-27 11:41:09
/*** 对每个背包所差石头数排序,从小到大一个一个填满,所需石头大于所给石头就说明此背包已经填不满,之前的均已填满*/class Solution {public int maximumBags(int[] capacity, int[] rocks, int additionalRocks) {int[] arr = new int[capacity.length];for (int i = 0; i < capacity.length; i++) {arr[i] = capacity[i]-rocks[i];}Arrays.sort(arr);int num=0;int i ;for ( i =1; i <= capacity.length; i++) {num+=arr[i-1];if (num>additionalRocks){return i-1;}}return i-1;}}