Skip to content

Commit 0b8c776

Browse files
authored
feat: add solutions to lc problem: No.1564 (doocs#1286)
No.1564.Put Boxes Into the Warehouse I
1 parent 7128097 commit 0b8c776

File tree

7 files changed

+371
-2
lines changed

7 files changed

+371
-2
lines changed

Diff for: solution/1500-1599/1564.Put Boxes Into the Warehouse I/README.md

+135-1
Original file line numberDiff line numberDiff line change
@@ -69,22 +69,156 @@
6969

7070
<!-- 这里可写通用的实现逻辑 -->
7171

72+
**方法一:预处理 + 排序 + 双指针**
73+
74+
我们可以先对仓库的房间进行预处理,得到一个数组 $left$,其中 $left[i]$ 表示下标 $i$ 可以放入的最大箱子高度。
75+
76+
然后对箱子的高度进行排序,从小到大依次放入仓库中。我们使用两个指针 $i$ 和 $j$ 分别指向箱子的第一个位置以及仓库的最后一个位置,如果 $left[j] \lt boxes[i]$,说明当前仓库无法放入箱子 $i$,我们将指针 $j$ 循环向左移动,直到 $left[j] \ge boxes[i]$ 或者 $j \lt 0$。如果此时 $j \lt 0$,说明仓库已经没有空间可以放入箱子 $i$,我们可以直接退出循环。否则说明仓库可以放入箱子 $i$,我们将指针 $i$ 循环向右移动,指针 $j$ 循环向左移动。继续进行上述操作,直到指针 $i$ 超出箱子的范围。
77+
78+
最后我们返回指针 $i$ 的值即可。
79+
80+
时间复杂度 $O(n \times \log n)$,空间复杂度 $O(n)$。其中 $n$ 为仓库的房间数。
81+
7282
<!-- tabs:start -->
7383

7484
### **Python3**
7585

7686
<!-- 这里可写当前语言的特殊实现逻辑 -->
7787

7888
```python
79-
89+
class Solution:
90+
def maxBoxesInWarehouse(self, boxes: List[int], warehouse: List[int]) -> int:
91+
n = len(warehouse)
92+
left = [warehouse[0]] * n
93+
for i in range(1, n):
94+
left[i] = min(left[i - 1], warehouse[i])
95+
boxes.sort()
96+
i, j = 0, n - 1
97+
while i < len(boxes):
98+
while j >= 0 and left[j] < boxes[i]:
99+
j -= 1
100+
if j < 0:
101+
break
102+
i, j = i + 1, j - 1
103+
return i
80104
```
81105

82106
### **Java**
83107

84108
<!-- 这里可写当前语言的特殊实现逻辑 -->
85109

86110
```java
111+
class Solution {
112+
public int maxBoxesInWarehouse(int[] boxes, int[] warehouse) {
113+
int n = warehouse.length;
114+
int[] left = new int[n];
115+
left[0] = warehouse[0];
116+
for (int i = 1; i < n; ++i) {
117+
left[i] = Math.min(left[i - 1], warehouse[i]);
118+
}
119+
Arrays.sort(boxes);
120+
int i = 0, j = n - 1;
121+
while (i < boxes.length) {
122+
while (j >= 0 && left[j] < boxes[i]) {
123+
--j;
124+
}
125+
if (j < 0) {
126+
break;
127+
}
128+
++i;
129+
--j;
130+
}
131+
return i;
132+
}
133+
}
134+
```
135+
136+
### **C++**
137+
138+
```cpp
139+
class Solution {
140+
public:
141+
int maxBoxesInWarehouse(vector<int>& boxes, vector<int>& warehouse) {
142+
int n = warehouse.size();
143+
int left[n];
144+
left[0] = warehouse[0];
145+
for (int i = 1; i < n; ++i) {
146+
left[i] = min(left[i - 1], warehouse[i]);
147+
}
148+
sort(boxes.begin(), boxes.end());
149+
int i = 0, j = n - 1;
150+
while (i < boxes.size()) {
151+
while (j >= 0 && left[j] < boxes[i]) {
152+
--j;
153+
}
154+
if (j < 0) {
155+
break;
156+
}
157+
++i;
158+
--j;
159+
}
160+
return i;
161+
}
162+
};
163+
```
164+
165+
### **Go**
166+
167+
```go
168+
func maxBoxesInWarehouse(boxes []int, warehouse []int) int {
169+
n := len(warehouse)
170+
left := make([]int, n)
171+
left[0] = warehouse[0]
172+
for i := 1; i < n; i++ {
173+
left[i] = min(left[i-1], warehouse[i])
174+
}
175+
sort.Ints(boxes)
176+
i, j := 0, n-1
177+
for i < len(boxes) {
178+
for j >= 0 && left[j] < boxes[i] {
179+
j--
180+
}
181+
if j < 0 {
182+
break
183+
}
184+
i, j = i+1, j-1
185+
}
186+
return i
187+
}
188+
189+
func min(a, b int) int {
190+
if a < b {
191+
return a
192+
}
193+
return b
194+
}
195+
```
87196

197+
### **TypeScript**
198+
199+
```ts
200+
function maxBoxesInWarehouse(boxes: number[], warehouse: number[]): number {
201+
const n = warehouse.length;
202+
const left: number[] = new Array(n);
203+
left[0] = warehouse[0];
204+
for (let i = 1; i < n; ++i) {
205+
left[i] = Math.min(left[i - 1], warehouse[i]);
206+
}
207+
boxes.sort((a, b) => a - b);
208+
let i = 0;
209+
let j = n - 1;
210+
while (i < boxes.length) {
211+
while (j >= 0 && left[j] < boxes[i]) {
212+
--j;
213+
}
214+
if (j < 0) {
215+
break;
216+
}
217+
++i;
218+
--j;
219+
}
220+
return i;
221+
}
88222
```
89223

90224
### **...**

Diff for: solution/1500-1599/1564.Put Boxes Into the Warehouse I/README_EN.md

+125-1
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,137 @@ Swapping the orange and green boxes is also valid, or swapping one of them with
6666
### **Python3**
6767

6868
```python
69-
69+
class Solution:
70+
def maxBoxesInWarehouse(self, boxes: List[int], warehouse: List[int]) -> int:
71+
n = len(warehouse)
72+
left = [warehouse[0]] * n
73+
for i in range(1, n):
74+
left[i] = min(left[i - 1], warehouse[i])
75+
boxes.sort()
76+
i, j = 0, n - 1
77+
while i < len(boxes):
78+
while j >= 0 and left[j] < boxes[i]:
79+
j -= 1
80+
if j < 0:
81+
break
82+
i, j = i + 1, j - 1
83+
return i
7084
```
7185

7286
### **Java**
7387

7488
```java
89+
class Solution {
90+
public int maxBoxesInWarehouse(int[] boxes, int[] warehouse) {
91+
int n = warehouse.length;
92+
int[] left = new int[n];
93+
left[0] = warehouse[0];
94+
for (int i = 1; i < n; ++i) {
95+
left[i] = Math.min(left[i - 1], warehouse[i]);
96+
}
97+
Arrays.sort(boxes);
98+
int i = 0, j = n - 1;
99+
while (i < boxes.length) {
100+
while (j >= 0 && left[j] < boxes[i]) {
101+
--j;
102+
}
103+
if (j < 0) {
104+
break;
105+
}
106+
++i;
107+
--j;
108+
}
109+
return i;
110+
}
111+
}
112+
```
113+
114+
### **C++**
115+
116+
```cpp
117+
class Solution {
118+
public:
119+
int maxBoxesInWarehouse(vector<int>& boxes, vector<int>& warehouse) {
120+
int n = warehouse.size();
121+
int left[n];
122+
left[0] = warehouse[0];
123+
for (int i = 1; i < n; ++i) {
124+
left[i] = min(left[i - 1], warehouse[i]);
125+
}
126+
sort(boxes.begin(), boxes.end());
127+
int i = 0, j = n - 1;
128+
while (i < boxes.size()) {
129+
while (j >= 0 && left[j] < boxes[i]) {
130+
--j;
131+
}
132+
if (j < 0) {
133+
break;
134+
}
135+
++i;
136+
--j;
137+
}
138+
return i;
139+
}
140+
};
141+
```
142+
143+
### **Go**
144+
145+
```go
146+
func maxBoxesInWarehouse(boxes []int, warehouse []int) int {
147+
n := len(warehouse)
148+
left := make([]int, n)
149+
left[0] = warehouse[0]
150+
for i := 1; i < n; i++ {
151+
left[i] = min(left[i-1], warehouse[i])
152+
}
153+
sort.Ints(boxes)
154+
i, j := 0, n-1
155+
for i < len(boxes) {
156+
for j >= 0 && left[j] < boxes[i] {
157+
j--
158+
}
159+
if j < 0 {
160+
break
161+
}
162+
i, j = i+1, j-1
163+
}
164+
return i
165+
}
166+
167+
func min(a, b int) int {
168+
if a < b {
169+
return a
170+
}
171+
return b
172+
}
173+
```
75174

175+
### **TypeScript**
176+
177+
```ts
178+
function maxBoxesInWarehouse(boxes: number[], warehouse: number[]): number {
179+
const n = warehouse.length;
180+
const left: number[] = new Array(n);
181+
left[0] = warehouse[0];
182+
for (let i = 1; i < n; ++i) {
183+
left[i] = Math.min(left[i - 1], warehouse[i]);
184+
}
185+
boxes.sort((a, b) => a - b);
186+
let i = 0;
187+
let j = n - 1;
188+
while (i < boxes.length) {
189+
while (j >= 0 && left[j] < boxes[i]) {
190+
--j;
191+
}
192+
if (j < 0) {
193+
break;
194+
}
195+
++i;
196+
--j;
197+
}
198+
return i;
199+
}
76200
```
77201

78202
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
public:
3+
int maxBoxesInWarehouse(vector<int>& boxes, vector<int>& warehouse) {
4+
int n = warehouse.size();
5+
int left[n];
6+
left[0] = warehouse[0];
7+
for (int i = 1; i < n; ++i) {
8+
left[i] = min(left[i - 1], warehouse[i]);
9+
}
10+
sort(boxes.begin(), boxes.end());
11+
int i = 0, j = n - 1;
12+
while (i < boxes.size()) {
13+
while (j >= 0 && left[j] < boxes[i]) {
14+
--j;
15+
}
16+
if (j < 0) {
17+
break;
18+
}
19+
++i;
20+
--j;
21+
}
22+
return i;
23+
}
24+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
func maxBoxesInWarehouse(boxes []int, warehouse []int) int {
2+
n := len(warehouse)
3+
left := make([]int, n)
4+
left[0] = warehouse[0]
5+
for i := 1; i < n; i++ {
6+
left[i] = min(left[i-1], warehouse[i])
7+
}
8+
sort.Ints(boxes)
9+
i, j := 0, n-1
10+
for i < len(boxes) {
11+
for j >= 0 && left[j] < boxes[i] {
12+
j--
13+
}
14+
if j < 0 {
15+
break
16+
}
17+
i, j = i+1, j-1
18+
}
19+
return i
20+
}
21+
22+
func min(a, b int) int {
23+
if a < b {
24+
return a
25+
}
26+
return b
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public int maxBoxesInWarehouse(int[] boxes, int[] warehouse) {
3+
int n = warehouse.length;
4+
int[] left = new int[n];
5+
left[0] = warehouse[0];
6+
for (int i = 1; i < n; ++i) {
7+
left[i] = Math.min(left[i - 1], warehouse[i]);
8+
}
9+
Arrays.sort(boxes);
10+
int i = 0, j = n - 1;
11+
while (i < boxes.length) {
12+
while (j >= 0 && left[j] < boxes[i]) {
13+
--j;
14+
}
15+
if (j < 0) {
16+
break;
17+
}
18+
++i;
19+
--j;
20+
}
21+
return i;
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution:
2+
def maxBoxesInWarehouse(self, boxes: List[int], warehouse: List[int]) -> int:
3+
n = len(warehouse)
4+
left = [warehouse[0]] * n
5+
for i in range(1, n):
6+
left[i] = min(left[i - 1], warehouse[i])
7+
boxes.sort()
8+
i, j = 0, n - 1
9+
while i < len(boxes):
10+
while j >= 0 and left[j] < boxes[i]:
11+
j -= 1
12+
if j < 0:
13+
break
14+
i, j = i + 1, j - 1
15+
return i

0 commit comments

Comments
 (0)