File tree 1 file changed +54
-0
lines changed
1 file changed +54
-0
lines changed Original file line number Diff line number Diff line change
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
+
1
55
/**
2
56
* @param {number[] } packages
3
57
* @param {number[][] } boxes
You can’t perform that action at this time.
0 commit comments