Leetcode 1011
by Kavita Ganeshan
- Capacity To Ship Packages Within D Days
A conveyor belt has packages that must be shipped from one port to another within D days.
The i-th package on the conveyor belt has a weight of weights[i]. Each day, we load the ship with packages on the conveyor belt (in the order given by weights). We may not load more weight than the maximum weight capacity of the ship.
Return the least weight capacity of the ship that will result in all the packages on the conveyor belt being shipped within D days.
Example 1:
Input: weights = [1,2,3,4,5,6,7,8,9,10], D = 5 Output: 15 Explanation: A ship capacity of 15 is the minimum to ship all the packages in 5 days like this: 1st day: 1, 2, 3, 4, 5 2nd day: 6, 7 3rd day: 8 4th day: 9 5th day: 10
Note that the cargo must be shipped in the order given, so using a ship of capacity 14 and splitting the packages into parts like (2, 3, 4, 5), (1, 6, 7), (8), (9), (10) is not allowed. Example 2:
Input: weights = [3,2,2,4,1,4], D = 3 Output: 6 Explanation: A ship capacity of 6 is the minimum to ship all the packages in 3 days like this: 1st day: 3, 2 2nd day: 2, 4 3rd day: 1, 4 Example 3:
Input: weights = [1,2,3,1,1], D = 4 Output: 3 Explanation: 1st day: 1 2nd day: 2 3rd day: 3 4th day: 1, 1
Note:
1 <= D <= weights.length <= 50000 1 <= weights[i] <= 500
My pointers to remember:
1011:
We dont know the max weight
if we have to ship everything in one day (D=1), then we will be able to send at minimum sum(weights[i]) = 16 or if we send each item in weights then it will take len(weights) = D = 6 in which case the minimum capacity will be max(weights[i]) = 4 { Because if we have ship capacity less than max(weights), we wont be able to ship that weight )
So indirectly this gives us the range of ship capacity being 4 to 16 where D ranges from 6 to 1 But we have D given as input ie D=3 and the order of weights is to be maintained while filling up.
- This clearly shows that we can use binary search to find the capacity of the ship
- We also need to partition the array in such a way that D=3 is maintained
https://leetcode.com/problems/capacity-to-ship-packages-within-d-days/discuss/256737/C++-Binary-Search/267064
So binary search + partition
Final Solution: https://leetcode.com/problems/capacity-to-ship-packages-within-d-days/discuss/256765/Python-Binary-search-with-detailed-explanation
To get to exactly D days and minimize the max sum of any partition, we do binary search in the sum space which is bounded by [max(a), sum(a)]
https://leetcode.com/problems/capacity-to-ship-packages-within-d-days/discuss/256729/JavaC++Python-Binary-Search/249951
Time complexity: O(n * logSIZE), where SIZE is the size of the search space (sum of weights - max weight). Space complexity: O(1)
Related questions:
- K-diff Pairs in an Array
- Valid Perfect Square
- Kth Smallest Number in Multiplication Table
- Koko Eating Bananas
- Ugly Number III
- Divide Chocolate
- Find the Smallest Divisor Given a Threshold
Tutorial TopCoder: https://www.topcoder.com/community/competitive-programming/tutorials/binary-search
Subscribe via RSS