Skip to content

Commit 25d9987

Browse files
authored
Update 1889-minimum-space-wasted-from-packaging.js
1 parent 6f7b7a0 commit 25d9987

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

1889-minimum-space-wasted-from-packaging.js

+54
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,57 @@
1+
/**
2+
* @param {number[]} packages
3+
* @param {number[][]} boxes
4+
* @return {number}
5+
*/
6+
const minWastedSpace = function (packages, boxes) {
7+
const mod = 1e9 + 7
8+
const n = packages.length
9+
packages.sort((a, b) => a - b)
10+
const preSum = packages.reduce(
11+
(acc, cur) => {
12+
acc.push(acc[acc.length - 1] + cur)
13+
return acc
14+
},
15+
[0]
16+
)
17+
18+
const upperBound = (target) => {
19+
let lo = 0,
20+
hi = n
21+
while (lo < hi) {
22+
const mi = (lo + hi) >> 1
23+
const val = packages[mi]
24+
if (val <= target) {
25+
lo = mi + 1
26+
} else {
27+
hi = mi
28+
}
29+
}
30+
return lo
31+
}
32+
33+
let res = Infinity
34+
for (const bs of boxes) {
35+
bs.sort((a, b) => b - a)
36+
if (bs[0] < packages[n - 1]) continue
37+
let wastes = bs[0] * n - preSum[n]
38+
let last = bs[0]
39+
for (let i = 1; i < bs.length; i++) {
40+
const b = bs[i]
41+
const j = upperBound(b)
42+
if (j <= 0) {
43+
break
44+
}
45+
wastes -= (last - b) * j
46+
last = b
47+
}
48+
res = Math.min(res, wastes)
49+
}
50+
return res === Infinity ? -1 : res % mod
51+
}
52+
53+
// another
54+
155
/**
256
* @param {number[]} packages
357
* @param {number[][]} boxes

0 commit comments

Comments
 (0)