class Solution {
public:
int minimumBoxes(vector<int>& apple, vector<int>& capacity) {
}
};
3074. 重新分装苹果
给你一个长度为 n
的数组 apple
和另一个长度为 m
的数组 capacity
。
一共有 n
个包裹,其中第 i
个包裹中装着 apple[i]
个苹果。同时,还有 m
个箱子,第 i
个箱子的容量为 capacity[i]
个苹果。
请你选择一些箱子来将这 n
个包裹中的苹果重新分装到箱子中,返回你需要选择的箱子的 最小 数量。
注意,同一个包裹中的苹果可以分装到不同的箱子中。
示例 1:
输入:apple = [1,3,2], capacity = [4,3,1,5,2] 输出:2 解释:使用容量为 4 和 5 的箱子。 总容量大于或等于苹果的总数,所以可以完成重新分装。
示例 2:
输入:apple = [5,5,5], capacity = [2,4,2,7] 输出:4 解释:需要使用所有箱子。
提示:
1 <= n == apple.length <= 50
1 <= m == capacity.length <= 50
1 <= apple[i], capacity[i] <= 50
原站题解
php 解法, 执行用时: 8 ms, 内存消耗: 20.1 MB, 提交时间: 2024-03-13 15:56:05
class Solution { /** * @param Integer[] $apple * @param Integer[] $capacity * @return Integer */ function minimumBoxes($apple, $capacity) { $s = array_sum($apple); // 计算苹果总数 arsort($capacity); // 按降序对容量进行排序 $i = 0; foreach ($capacity as $x) { $i++; $s -= $x; if ($s <= 0) { // 所有苹果都装入了箱子 return $i; } } } }
java 解法, 执行用时: 1 ms, 内存消耗: 41.3 MB, 提交时间: 2024-03-13 15:54:10
class Solution { public int minimumBoxes(int[] apple, int[] capacity) { int s = 0; for (int x : apple) { s += x; } Arrays.sort(capacity); int m = capacity.length; int i = m - 1; for (; s > 0; i--) { s -= capacity[i]; } return m - 1 - i; } }
golang 解法, 执行用时: 2 ms, 内存消耗: 2.3 MB, 提交时间: 2024-03-13 15:53:56
func minimumBoxes(apple, capacity []int) int { s := 0 for _, x := range apple { s += x } slices.SortFunc(capacity, func(a, b int) int { return b - a }) for i, c := range capacity { s -= c if s <= 0 { // 所有苹果都装入了箱子 return i + 1 // 0 到 i 有 i+1 个箱子 } } return -1 }
python3 解法, 执行用时: 43 ms, 内存消耗: 16.4 MB, 提交时间: 2024-03-13 15:53:42
class Solution: def minimumBoxes(self, apple: List[int], capacity: List[int]) -> int: s = sum(apple) capacity.sort(reverse=True) for i, x in enumerate(capacity, 1): s -= x if s <= 0: # 所有苹果都装入了箱子 return i