1011. Capacity To Ship Packages Within D Days LeetCode Solution
In this guide, you will get 1011. Capacity To Ship Packages Within D Days LeetCode Solution with the best time and space complexity. The solution to Capacity To Ship Packages Within D Days problem is provided in various programming languages like C++, Java, and Python. This will be helpful for you if you are preparing for placements, hackathons, interviews, or practice purposes. The solutions provided here are very easy to follow and include detailed explanations.
Table of Contents
- Problem Statement
- Complexity Analysis
- Capacity To Ship Packages Within D Days solution in C++
- Capacity To Ship Packages Within D Days solution in Java
- Capacity To Ship Packages Within D Days solution in Python
- Additional Resources

Problem Statement of Capacity To Ship Packages Within D Days
A conveyor belt has packages that must be shipped from one port to another within days days.
The ith 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 days days.
Example 1:
Input: weights = [1,2,3,4,5,6,7,8,9,10], days = 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], days = 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], days = 4
Output: 3
Explanation:
1st day: 1
2nd day: 2
3rd day: 3
4th day: 1, 1
Constraints:
1 <= days <= weights.length <= 5 * 104
1 <= weights[i] <= 500
Complexity Analysis
- Time Complexity: O(n\log(\Sigma |\texttt{piles[i]}|))
- Space Complexity: O(1)
1011. Capacity To Ship Packages Within D Days LeetCode Solution in C++
class Solution {
public:
int shipWithinDays(vector<int>& weights, int days) {
int l = ranges::max(weights);
int r = accumulate(weights.begin(), weights.end(), 0);
while (l < r) {
const int m = (l + r) / 2;
if (shipDays(weights, m) <= days)
r = m;
else
l = m + 1;
}
return l;
}
private:
int shipDays(const vector<int>& weights, int shipCapacity) {
int days = 1;
int capacity = 0;
for (const int weight : weights)
if (capacity + weight > shipCapacity) {
++days;
capacity = weight;
} else {
capacity += weight;
}
return days;
};
};
/* code provided by PROGIEZ */
1011. Capacity To Ship Packages Within D Days LeetCode Solution in Java
class Solution {
public int shipWithinDays(int[] weights, int days) {
int l = Arrays.stream(weights).max().getAsInt();
int r = Arrays.stream(weights).sum();
while (l < r) {
final int m = (l + r) / 2;
if (shipDays(weights, m) <= days)
r = m;
else
l = m + 1;
}
return l;
}
private int shipDays(int[] weights, int shipCapacity) {
int days = 1;
int capacity = 0;
for (final int weight : weights)
if (capacity + weight > shipCapacity) {
++days;
capacity = weight;
} else {
capacity += weight;
}
return days;
}
}
// code provided by PROGIEZ
1011. Capacity To Ship Packages Within D Days LeetCode Solution in Python
class Solution:
def shipWithinDays(self, weights: list[int], days: int) -> int:
def shipDays(shipCapacity: int) -> int:
shipDays = 1
capacity = 0
for weight in weights:
if capacity + weight > shipCapacity:
shipDays += 1
capacity = weight
else:
capacity += weight
return shipDays
l = max(weights)
r = sum(weights)
return bisect.bisect_left(range(l, r), True,
key=lambda m: shipDays(m) <= days) + l
# code by PROGIEZ
Additional Resources
- Explore all LeetCode problem solutions at Progiez here
- Explore all problems on LeetCode website here
Happy Coding! Keep following PROGIEZ for more updates and solutions.