Suppose we have a list of numbers called nums where each value represents a group of people looking to skydive together. And we have another value k representing how many days they can apply for skydiving. We have to find the minimum capacity of the plane we need to be able to fulfill all requests within k days. The requests should be fulfilled in the order they were given and a plane can only fly once a day.
So, if the input is like nums = [16, 12, 18, 11, 13], k = 3, then the output will be 28, as 28-person airplane can group the given requests by [16, 12], [18], [11, 13].
To solve this, we will follow these steps −
- if nums is empty, then
- return 0
- start := maximum of nums, end := sum of all elements of nums
- while start < end, do
- mid := (start + end) / 2
- days := 1, temp := 0
- for each num in nums, do
- if temp + num > mid, then
- days := days + 1
- temp := num
- otherwise,
- temp := temp + num
- if temp + num > mid, then
- if days > k, then
- start := mid + 1
- otherwise,
- end := mid
- return start
Let us see the following implementation to get better understanding −
Example
class Solution: def solve(self, nums, k): if not nums: return 0 start, end = max(nums), sum(nums) while start < end: mid = (start + end) // 2 days = 1 temp = 0 for num in nums: if temp + num > mid: days += 1 temp = num else: temp += num if days > k: start = mid + 1 else: end = mid return start ob = Solution() nums = [16, 12, 18, 11, 13] k = 3 print(ob.solve(nums, k))
Input
[16, 12, 18, 11, 13], 3
Output
28