Class Solution
java.lang.Object
g1601_1700.s1687_delivering_boxes_from_storage_to_ports.Solution
1687 - Delivering Boxes from Storage to Ports.<p>Hard</p>
<p>You have the task of delivering some boxes from storage to their ports using only one ship. However, this ship has a <strong>limit</strong> on the <strong>number of boxes</strong> and the <strong>total weight</strong> that it can carry.</p>
<p>You are given an array <code>boxes</code>, where <code>boxes[i] = [ports<sub>i</sub>, weight<sub>i</sub>]</code>, and three integers <code>portsCount</code>, <code>maxBoxes</code>, and <code>maxWeight</code>.</p>
<ul>
<li><code>ports<sub>i</sub></code> is the port where you need to deliver the <code>i<sup>th</sup></code> box and <code>weights<sub>i</sub></code> is the weight of the <code>i<sup>th</sup></code> box.</li>
<li><code>portsCount</code> is the number of ports.</li>
<li><code>maxBoxes</code> and <code>maxWeight</code> are the respective box and weight limits of the ship.</li>
</ul>
<p>The boxes need to be delivered <strong>in the order they are given</strong>. The ship will follow these steps:</p>
<ul>
<li>The ship will take some number of boxes from the <code>boxes</code> queue, not violating the <code>maxBoxes</code> and <code>maxWeight</code> constraints.</li>
<li>For each loaded box <strong>in order</strong> , the ship will make a <strong>trip</strong> to the port the box needs to be delivered to and deliver it. If the ship is already at the correct port, no <strong>trip</strong> is needed, and the box can immediately be delivered.</li>
<li>The ship then makes a return <strong>trip</strong> to storage to take more boxes from the queue.</li>
</ul>
<p>The ship must end at storage after all the boxes have been delivered.</p>
<p>Return <em>the <strong>minimum</strong> number of <strong>trips</strong> the ship needs to make to deliver all boxes to their respective ports.</em></p>
<p><strong>Example 1:</strong></p>
<p><strong>Input:</strong> boxes = [[1,1],[2,1],[1,1]], portsCount = 2, maxBoxes = 3, maxWeight = 3</p>
<p><strong>Output:</strong> 4</p>
<p><strong>Explanation:</strong> The optimal strategy is as follows:</p>
<ul>
<li>The ship takes all the boxes in the queue, goes to port 1, then port 2, then port 1 again, then returns to storage. 4 trips.</li>
</ul>
<p>So the total number of trips is 4.</p>
<p>Note that the first and third boxes cannot be delivered together because the boxes need to be delivered in order (i.e. the second box needs to be delivered at port 2 before the third box).</p>
<p><strong>Example 2:</strong></p>
<p><strong>Input:</strong> boxes = [[1,2],[3,3],[3,1],[3,1],[2,4]], portsCount = 3, maxBoxes = 3, maxWeight = 6</p>
<p><strong>Output:</strong> 6</p>
<p><strong>Explanation:</strong> The optimal strategy is as follows: - The ship takes the first box, goes to port 1, then returns to storage. 2 trips. - The ship takes the second, third and fourth boxes, goes to port 3, then returns to storage. 2 trips. - The ship takes the fifth box, goes to port 3, then returns to storage. 2 trips. So the total number of trips is 2 + 2 + 2 = 6.</p>
<p><strong>Example 3:</strong></p>
<p><strong>Input:</strong> boxes = [[1,4],[1,2],[2,1],[2,1],[3,2],[3,4]], portsCount = 3, maxBoxes = 6, maxWeight = 7</p>
<p><strong>Output:</strong> 6</p>
<p><strong>Explanation:</strong> The optimal strategy is as follows:</p>
<ul>
<li>
<p>The ship takes the first and second boxes, goes to port 1, then returns to storage. 2 trips.</p>
</li>
<li>
<p>The ship takes the third and fourth boxes, goes to port 2, then returns to storage. 2 trips.</p>
</li>
<li>
<p>The ship takes the fifth and sixth boxes, goes to port 3, then returns to storage. 2 trips.</p>
</li>
</ul>
<p>So the total number of trips is 2 + 2 + 2 = 6.</p>
<p><strong>Constraints:</strong></p>
<ul>
<li><code>1 <= boxes.length <= 10<sup>5</sup></code></li>
<li><code>1 <= portsCount, maxBoxes, maxWeight <= 10<sup>5</sup></code></li>
<li><code>1 <= ports<sub>i</sub> <= portsCount</code></li>
<li><code>1 <= weights<sub>i</sub> <= maxWeight</code></li>
</ul>
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionintboxDelivering(int[][] boxes, int portsCount, int maxBoxes, int maxWeight)
-
Constructor Details
-
Solution
public Solution()
-
-
Method Details
-
boxDelivering
public int boxDelivering(int[][] boxes, int portsCount, int maxBoxes, int maxWeight)
-