File tree Expand file tree Collapse file tree 3 files changed +106
-0
lines changed
solution/1800-1899/1889.Minimum Space Wasted From Packaging Expand file tree Collapse file tree 3 files changed +106
-0
lines changed Original file line number Diff line number Diff line change @@ -141,6 +141,43 @@ class Solution {
141141}
142142```
143143
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+
144181### ** ...**
145182
146183```
Original file line number Diff line number Diff line change @@ -128,6 +128,43 @@ class Solution {
128128}
129129```
130130
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+
131168### ** ...**
132169
133170```
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