- Related Questions & Answers
- Program to find minimum bus fare for travelling all days in Python?
- Program to find minimum required chances to form a string with K unique characters in Python
- Program to find minimum number of bricks required to make k towers of same height in Python
- Program to find minimum sum of difficulties to complete jobs over k days in C++
- Program to find minimum swaps required to make given anagram in python
- Program to find state of prison cells after k days in python
- Program to find minimum number of days to wait to make profit in python
- Program to find minimum number of hops required to reach end position in Python
- Program to find minimum number of buses required to reach final target in python
- Program to find minimum number of flips required to have alternating values in Python
- Program to find minimum possible maximum value after k operations in python
- Program to find minimum number of operations required to make lists strictly Increasing in python
- Program to find minimum number of movie theatres required to show all movies in python
- Program to Find Minimum Jumps Required to Reach a Value with Different Parity in Python
- Program to find minimum cost to paint fences with k different colors in Python

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

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 −

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))

[16, 12, 18, 11, 13], 3

28

Advertisements