Minimum Space Wasted From Packaging LeetCode solution in JavaScript

1
/**
2
* @param {number[]} packages
3
* @param {number[][]} boxes
4
* @return {number}
5
*/
6
var minWastedSpace = function (packages, boxes) {
7
let count = 0,
8
b,
9
minWastage,
10
totalPackagesSize = 0n,
11
minBoxesAreaForAnySupplier = BigInt(Number.MAX_SAFE_INTEGER),
12
boxesArea = 0n,
13
p,
14
coverdPackagesIndex,
15
totalBoxesAreaForSupplier;
16
packages.sort(function (a, b) {
17
return a - b;
18
});
19
for (let i = 0; i < packages.length; i++) {
20
totalPackagesSize += BigInt(packages[i]);
21
}
22

23
for (let i = 0; i < boxes.length; i++) {
24
boxes[i].sort(function (a, b) {
25
return a - b;
26
});
27
p = 0;
28
totalBoxesAreaForSupplier = 0n;
29
if (boxes[i][boxes[i].length - 1] < packages[packages.length - 1]) {
30
//This supplier is not big enough box for the largest package, hence this supplier can't be used.
31
continue;
32
}
33
for (let b = 0; b < boxes[i].length; b++) {
34
coverdPackagesIndex = binaryLowerBound(
35
packages,
36
p,
37
packages.length - 1,
38
boxes[i][b]
39
);
40
if (coverdPackagesIndex !== -1) {
41
totalBoxesAreaForSupplier +=
42
BigInt(boxes[i][b]) * BigInt(coverdPackagesIndex - p + 1);
43
p = coverdPackagesIndex + 1;
44
if (p === packages.length) {
45
break;
46
}
47
}
48
}
49
if (p === packages.length) {
50
//Check if the current supplier was able to pack all the packages.
51
if (totalBoxesAreaForSupplier < minBoxesAreaForAnySupplier) {
52
minBoxesAreaForAnySupplier = totalBoxesAreaForSupplier;
53
}
54
}
55
}
56
if (minBoxesAreaForAnySupplier !== BigInt(Number.MAX_SAFE_INTEGER)) {
57
return (minBoxesAreaForAnySupplier - totalPackagesSize) % 1000000007n;
58
} else {
59
return -1;
60
}
61

62
function binaryLowerBound(arr, left, right, key) {
63
let mid,
64
ans = -1;
65
while (left <= right) {
66
mid = left + Math.floor((right - left) / 2);
67
if (arr[mid] <= key) {
68
ans = mid;
69
left = mid + 1;
70
} else {
71
right = mid - 1;
72
}
73
}
74
return ans;
75
}
76
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0