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

  1. Problem Statement
  2. Complexity Analysis
  3. Capacity To Ship Packages Within D Days solution in C++
  4. Capacity To Ship Packages Within D Days solution in Java
  5. Capacity To Ship Packages Within D Days solution in Python
  6. Additional Resources
1011. Capacity To Ship Packages Within D Days LeetCode Solution image

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.

See also  996. Number of Squareful Arrays LeetCode Solution

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

See also  891. Sum of Subsequence Widths LeetCode Solution

Happy Coding! Keep following PROGIEZ for more updates and solutions.