给你一个长度为 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
- 输入数据保证可以将包裹中的苹果重新分装到箱子中。
思路:要将所有的苹果全部装入箱子中,并且使用的箱子要最少,故我们要用最大的箱子先去装,这个最大的箱子装满了;再用第二大的箱子去装……
对于apple数组,因为我们要装所有的苹果,至于哪个包裹的苹果先装并不需要考虑,所以我们只需要对其求和,知道我们一共需要装多少苹果即可;
对于capacity数组,我们从最大的箱子开始用,然后是第二大的箱子,因此我们对其进行降序排序,然后遍历去和苹果总数比较。
代码(Python):
class Solution(object):
def minimumBoxes(self, apple, capacity):
num = sum(apple) //需要装的苹果总数
capacity = sorted(capacity,reverse = True) //按箱子容量降序排序
boxNum = 1 //最少也要一个箱子
for i,value in enumerate(capacity):
num -= value //用该箱子装完后还剩多少苹果需要装
if num > 0:
boxNum += 1
else:
break
return boxNum