Easy
You are given an array apple
of size n
and an array capacity
of size m
.
There are n
packs where the ith
pack contains apple[i]
apples. There are m
boxes as well, and the ith
box has a capacity of capacity[i]
apples.
Return the minimum number of boxes you need to select to redistribute these n
packs of apples into boxes.
Note that, apples from the same pack can be distributed into different boxes.
Example 1:
Input: apple = [1,3,2], capacity = [4,3,1,5,2]
Output: 2
Explanation: We will use boxes with capacities 4 and 5. It is possible to distribute the apples as the total capacity is greater than or equal to the total number of apples.
Example 2:
Input: apple = [5,5,5], capacity = [2,4,2,7]
Output: 4
Explanation: We will need to use all the boxes.
Constraints:
1 <= n == apple.length <= 50
1 <= m == capacity.length <= 50
1 <= apple[i], capacity[i] <= 50
import kotlin.math.max
class Solution {
fun minimumBoxes(apple: IntArray, capacity: IntArray): Int {
val count = IntArray(51)
var appleSum = 0
for (j in apple) {
appleSum += j
}
var reqCapacity = 0
var max = 0
for (j in capacity) {
count[j]++
max = max(max.toDouble(), j.toDouble()).toInt()
}
for (i in max downTo 0) {
if (count[i] >= 1) {
while (count[i] != 0) {
appleSum -= i
reqCapacity++
if (appleSum <= 0) {
return reqCapacity
}
count[i]--
}
}
}
return reqCapacity
}
}