Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
136 changes: 135 additions & 1 deletion solution/1500-1599/1564.Put Boxes Into the Warehouse I/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,22 +69,156 @@

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

**方法一:预处理 + 排序 + 双指针**

我们可以先对仓库的房间进行预处理,得到一个数组 $left$,其中 $left[i]$ 表示下标 $i$ 可以放入的最大箱子高度。

然后对箱子的高度进行排序,从小到大依次放入仓库中。我们使用两个指针 $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$ 超出箱子的范围。

最后我们返回指针 $i$ 的值即可。

时间复杂度 $O(n \times \log n)$,空间复杂度 $O(n)$。其中 $n$ 为仓库的房间数。

<!-- tabs:start -->

### **Python3**

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

```python

class Solution:
def maxBoxesInWarehouse(self, boxes: List[int], warehouse: List[int]) -> int:
n = len(warehouse)
left = [warehouse[0]] * n
for i in range(1, n):
left[i] = min(left[i - 1], warehouse[i])
boxes.sort()
i, j = 0, n - 1
while i < len(boxes):
while j >= 0 and left[j] < boxes[i]:
j -= 1
if j < 0:
break
i, j = i + 1, j - 1
return i
```

### **Java**

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

```java
class Solution {
public int maxBoxesInWarehouse(int[] boxes, int[] warehouse) {
int n = warehouse.length;
int[] left = new int[n];
left[0] = warehouse[0];
for (int i = 1; i < n; ++i) {
left[i] = Math.min(left[i - 1], warehouse[i]);
}
Arrays.sort(boxes);
int i = 0, j = n - 1;
while (i < boxes.length) {
while (j >= 0 && left[j] < boxes[i]) {
--j;
}
if (j < 0) {
break;
}
++i;
--j;
}
return i;
}
}
```

### **C++**

```cpp
class Solution {
public:
int maxBoxesInWarehouse(vector<int>& boxes, vector<int>& warehouse) {
int n = warehouse.size();
int left[n];
left[0] = warehouse[0];
for (int i = 1; i < n; ++i) {
left[i] = min(left[i - 1], warehouse[i]);
}
sort(boxes.begin(), boxes.end());
int i = 0, j = n - 1;
while (i < boxes.size()) {
while (j >= 0 && left[j] < boxes[i]) {
--j;
}
if (j < 0) {
break;
}
++i;
--j;
}
return i;
}
};
```

### **Go**

```go
func maxBoxesInWarehouse(boxes []int, warehouse []int) int {
n := len(warehouse)
left := make([]int, n)
left[0] = warehouse[0]
for i := 1; i < n; i++ {
left[i] = min(left[i-1], warehouse[i])
}
sort.Ints(boxes)
i, j := 0, n-1
for i < len(boxes) {
for j >= 0 && left[j] < boxes[i] {
j--
}
if j < 0 {
break
}
i, j = i+1, j-1
}
return i
}

func min(a, b int) int {
if a < b {
return a
}
return b
}
```

### **TypeScript**

```ts
function maxBoxesInWarehouse(boxes: number[], warehouse: number[]): number {
const n = warehouse.length;
const left: number[] = new Array(n);
left[0] = warehouse[0];
for (let i = 1; i < n; ++i) {
left[i] = Math.min(left[i - 1], warehouse[i]);
}
boxes.sort((a, b) => a - b);
let i = 0;
let j = n - 1;
while (i < boxes.length) {
while (j >= 0 && left[j] < boxes[i]) {
--j;
}
if (j < 0) {
break;
}
++i;
--j;
}
return i;
}
```

### **...**
Expand Down
126 changes: 125 additions & 1 deletion solution/1500-1599/1564.Put Boxes Into the Warehouse I/README_EN.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,137 @@ Swapping the orange and green boxes is also valid, or swapping one of them with
### **Python3**

```python

class Solution:
def maxBoxesInWarehouse(self, boxes: List[int], warehouse: List[int]) -> int:
n = len(warehouse)
left = [warehouse[0]] * n
for i in range(1, n):
left[i] = min(left[i - 1], warehouse[i])
boxes.sort()
i, j = 0, n - 1
while i < len(boxes):
while j >= 0 and left[j] < boxes[i]:
j -= 1
if j < 0:
break
i, j = i + 1, j - 1
return i
```

### **Java**

```java
class Solution {
public int maxBoxesInWarehouse(int[] boxes, int[] warehouse) {
int n = warehouse.length;
int[] left = new int[n];
left[0] = warehouse[0];
for (int i = 1; i < n; ++i) {
left[i] = Math.min(left[i - 1], warehouse[i]);
}
Arrays.sort(boxes);
int i = 0, j = n - 1;
while (i < boxes.length) {
while (j >= 0 && left[j] < boxes[i]) {
--j;
}
if (j < 0) {
break;
}
++i;
--j;
}
return i;
}
}
```

### **C++**

```cpp
class Solution {
public:
int maxBoxesInWarehouse(vector<int>& boxes, vector<int>& warehouse) {
int n = warehouse.size();
int left[n];
left[0] = warehouse[0];
for (int i = 1; i < n; ++i) {
left[i] = min(left[i - 1], warehouse[i]);
}
sort(boxes.begin(), boxes.end());
int i = 0, j = n - 1;
while (i < boxes.size()) {
while (j >= 0 && left[j] < boxes[i]) {
--j;
}
if (j < 0) {
break;
}
++i;
--j;
}
return i;
}
};
```

### **Go**

```go
func maxBoxesInWarehouse(boxes []int, warehouse []int) int {
n := len(warehouse)
left := make([]int, n)
left[0] = warehouse[0]
for i := 1; i < n; i++ {
left[i] = min(left[i-1], warehouse[i])
}
sort.Ints(boxes)
i, j := 0, n-1
for i < len(boxes) {
for j >= 0 && left[j] < boxes[i] {
j--
}
if j < 0 {
break
}
i, j = i+1, j-1
}
return i
}

func min(a, b int) int {
if a < b {
return a
}
return b
}
```

### **TypeScript**

```ts
function maxBoxesInWarehouse(boxes: number[], warehouse: number[]): number {
const n = warehouse.length;
const left: number[] = new Array(n);
left[0] = warehouse[0];
for (let i = 1; i < n; ++i) {
left[i] = Math.min(left[i - 1], warehouse[i]);
}
boxes.sort((a, b) => a - b);
let i = 0;
let j = n - 1;
while (i < boxes.length) {
while (j >= 0 && left[j] < boxes[i]) {
--j;
}
if (j < 0) {
break;
}
++i;
--j;
}
return i;
}
```

### **...**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
class Solution {
public:
int maxBoxesInWarehouse(vector<int>& boxes, vector<int>& warehouse) {
int n = warehouse.size();
int left[n];
left[0] = warehouse[0];
for (int i = 1; i < n; ++i) {
left[i] = min(left[i - 1], warehouse[i]);
}
sort(boxes.begin(), boxes.end());
int i = 0, j = n - 1;
while (i < boxes.size()) {
while (j >= 0 && left[j] < boxes[i]) {
--j;
}
if (j < 0) {
break;
}
++i;
--j;
}
return i;
}
};
27 changes: 27 additions & 0 deletions solution/1500-1599/1564.Put Boxes Into the Warehouse I/Solution.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
func maxBoxesInWarehouse(boxes []int, warehouse []int) int {
n := len(warehouse)
left := make([]int, n)
left[0] = warehouse[0]
for i := 1; i < n; i++ {
left[i] = min(left[i-1], warehouse[i])
}
sort.Ints(boxes)
i, j := 0, n-1
for i < len(boxes) {
for j >= 0 && left[j] < boxes[i] {
j--
}
if j < 0 {
break
}
i, j = i+1, j-1
}
return i
}

func min(a, b int) int {
if a < b {
return a
}
return b
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
class Solution {
public int maxBoxesInWarehouse(int[] boxes, int[] warehouse) {
int n = warehouse.length;
int[] left = new int[n];
left[0] = warehouse[0];
for (int i = 1; i < n; ++i) {
left[i] = Math.min(left[i - 1], warehouse[i]);
}
Arrays.sort(boxes);
int i = 0, j = n - 1;
while (i < boxes.length) {
while (j >= 0 && left[j] < boxes[i]) {
--j;
}
if (j < 0) {
break;
}
++i;
--j;
}
return i;
}
}
15 changes: 15 additions & 0 deletions solution/1500-1599/1564.Put Boxes Into the Warehouse I/Solution.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
class Solution:
def maxBoxesInWarehouse(self, boxes: List[int], warehouse: List[int]) -> int:
n = len(warehouse)
left = [warehouse[0]] * n
for i in range(1, n):
left[i] = min(left[i - 1], warehouse[i])
boxes.sort()
i, j = 0, n - 1
while i < len(boxes):
while j >= 0 and left[j] < boxes[i]:
j -= 1
if j < 0:
break
i, j = i + 1, j - 1
return i
Loading