File tree 3 files changed +106
-0
lines changed
solution/1800-1899/1889.Minimum Space Wasted From Packaging
3 files changed +106
-0
lines changed Original file line number Diff line number Diff line change @@ -141,6 +141,43 @@ class Solution {
141
141
}
142
142
```
143
143
144
+ ### ** TypeScript**
145
+
146
+ ``` ts
147
+ function minWastedSpace(packages : number [], boxes : number [][]): number {
148
+ const MOD = 10 ** 9 + 7 ;
149
+ packages .sort ((a , b ) => a - b );
150
+ const max_package = packages [packages .length - 1 ];
151
+ const total = packages .reduce ((a , c ) => a + c , 0 );
152
+ let res = Infinity ;
153
+ for (let box of boxes ) {
154
+ box .sort ((a , b ) => a - b );
155
+ if (max_package > box [box .length - 1 ]) continue ;
156
+ let left = 0 , sum = 0 ;
157
+ for (let capacity of box ) {
158
+ let right = searchRight (packages , capacity , left );
159
+ sum += (right - left ) * capacity ;
160
+ left = right ;
161
+ }
162
+ res = Math .min (res , sum );
163
+ }
164
+ return res == Infinity ? - 1 : (res - total ) % MOD ;
165
+ };
166
+
167
+ function searchRight(packages : number [], target : number , left : number ): number {
168
+ let right = packages .length ;
169
+ while (left < right ) {
170
+ let mid = (left + right ) >> 1 ;
171
+ if (packages [mid ] <= target ) {
172
+ left = mid + 1 ;
173
+ } else {
174
+ right = mid ;
175
+ }
176
+ }
177
+ return left ;
178
+ }
179
+ ```
180
+
144
181
### ** ...**
145
182
146
183
```
Original file line number Diff line number Diff line change @@ -128,6 +128,43 @@ class Solution {
128
128
}
129
129
```
130
130
131
+ ### ** TypeScript**
132
+
133
+ ``` ts
134
+ function minWastedSpace(packages : number [], boxes : number [][]): number {
135
+ const MOD = 10 ** 9 + 7 ;
136
+ packages .sort ((a , b ) => a - b );
137
+ const max_package = packages [packages .length - 1 ];
138
+ const total = packages .reduce ((a , c ) => a + c , 0 );
139
+ let res = Infinity ;
140
+ for (let box of boxes ) {
141
+ box .sort ((a , b ) => a - b );
142
+ if (max_package > box [box .length - 1 ]) continue ;
143
+ let left = 0 , sum = 0 ;
144
+ for (let capacity of box ) {
145
+ let right = searchRight (packages , capacity , left );
146
+ sum += (right - left ) * capacity ;
147
+ left = right ;
148
+ }
149
+ res = Math .min (res , sum );
150
+ }
151
+ return res == Infinity ? - 1 : (res - total ) % MOD ;
152
+ };
153
+
154
+ function searchRight(packages : number [], target : number , left : number ): number {
155
+ let right = packages .length ;
156
+ while (left < right ) {
157
+ let mid = (left + right ) >> 1 ;
158
+ if (packages [mid ] <= target ) {
159
+ left = mid + 1 ;
160
+ } else {
161
+ right = mid ;
162
+ }
163
+ }
164
+ return left ;
165
+ }
166
+ ```
167
+
131
168
### ** ...**
132
169
133
170
```
Original file line number Diff line number Diff line change
1
+ function minWastedSpace ( packages : number [ ] , boxes : number [ ] [ ] ) : number {
2
+ const MOD = 10 ** 9 + 7 ;
3
+ packages . sort ( ( a , b ) => a - b ) ;
4
+ const max_package = packages [ packages . length - 1 ] ;
5
+ const total = packages . reduce ( ( a , c ) => a + c , 0 ) ;
6
+ let res = Infinity ;
7
+ for ( let box of boxes ) {
8
+ box . sort ( ( a , b ) => a - b ) ;
9
+ if ( max_package > box [ box . length - 1 ] ) continue ;
10
+ let left = 0 , sum = 0 ;
11
+ for ( let capacity of box ) {
12
+ let right = searchRight ( packages , capacity , left ) ;
13
+ sum += ( right - left ) * capacity ;
14
+ left = right ;
15
+ }
16
+ res = Math . min ( res , sum ) ;
17
+ }
18
+ return res == Infinity ? - 1 : ( res - total ) % MOD ;
19
+ } ;
20
+
21
+ function searchRight ( packages : number [ ] , target : number , left : number ) : number {
22
+ let right = packages . length ;
23
+ while ( left < right ) {
24
+ let mid = ( left + right ) >> 1 ;
25
+ if ( packages [ mid ] <= target ) {
26
+ left = mid + 1 ;
27
+ } else {
28
+ right = mid ;
29
+ }
30
+ }
31
+ return left ;
32
+ }
You can’t perform that action at this time.
0 commit comments