Delivering Boxes from Storage to Ports LeetCode solution in Java

1
class Solution {
2
public int boxDelivering(int[][] boxes, int portsCount, int maxBoxes, int maxWeight) {
3
int[] diffCity = new int[boxes.length + 1];
4
int[] weights = new int[boxes.length + 1];
5

6
for (int i = 0; i < boxes.length; i++) {
7
diffCity[i + 1] = diffCity[i] + ((i != 0 && boxes[i][0] == boxes[i - 1][0]) ? 0 : 1);
8
weights[i + 1] = weights[i] + boxes[i][1];
9
}
10
int[] dp = new int[boxes.length + 1];
11
Arrays.fill(dp, Integer.MAX_VALUE);
12
dp[0] = 0;
13
diffCity[0] = 1;
14
for (int i = 1; i <= boxes.length; i++) { // offset by 1 since our above logic reaches dp[-1]
15
for (int j = i - 1; j >= 0; j--) {
16
int dC =
17
diffCity[i]
18
- diffCity[j + 1]; // computes # of different cities from i to j. (add 1 to j is
19
// necessary here)
20
int w = weights[i] - weights[j];
21
int b = i - j;
22
if (b <= maxBoxes && w <= maxWeight) {
23
dp[i] = Math.min(dp[i], 2 + dC + dp[j]);
24
}
25
}
26
}
27
return dp[boxes.length];
28
}
29
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0