Skip to content

Commit 78f7e50

Browse files
authored
feat: add typescript solution to lc problem: No.1889.Minimum Space Wasted From Packaging (doocs#442)
1 parent 1ed9a86 commit 78f7e50

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed

solution/1800-1899/1889.Minimum Space Wasted From Packaging/README.md

+37
Original file line numberDiff line numberDiff 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
```

solution/1800-1899/1889.Minimum Space Wasted From Packaging/README_EN.md

+37
Original file line numberDiff line numberDiff 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 numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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+
}

0 commit comments

Comments
 (0)