Python程序:查找最多可放入其他盒子中的盒子数量
假设我们有一个盒子列表,其中每一行代表给定盒子的高度和宽度。如果第一个盒子小于第二个盒子(当它的宽度和高度都小于另一个盒子时),我们可以将一个盒子放入另一个盒子中,我们必须找到可以放入一个盒子中的最大盒子数。
因此,如果输入类似于
| 宽度 | 高度 |
| 12 | 12 |
| 10 | 10 |
| 6 | 6 |
| 5 | 10 |
则输出将为 3,因为我们可以将盒子 [6, 6] 放入 [10, 10] 中,该盒子可以放入 [12, 12] 盒子中。
为了解决这个问题,我们将遵循以下步骤:
- 定义一个函数 insert_index()。这将获取 arr 和 this_h。
- l := 0
- r := arr 的大小 - 1
- res := 0
- 当 l <= r 时,执行以下操作
- m := l +(r - l) // 2
- cur_h := arr[m]
- 如果 cur_h < this_h 不为零,则
- res := m
- l := m + 1
- 否则,
- r := m - 1
- 返回 res + 1
- 从主方法中,执行以下操作
- 根据宽度对矩阵进行排序,如果宽度相同,则根据高度对其进行排序
- n := 矩阵中项目的数量
- heights := 一个大小为 (n + 1) 的列表,并将其填充为 inf
- heights[0] := -inf
- res := 0
- 对于矩阵中的每个盒子,执行以下操作
- [cur_w, cur_h] := 盒子
- index := insert_index(heights, cur_h)
- 如果 heights[index] >= cur_h,则
- heights[index] := cur_h
- res := res 和 index 的最大值
- 返回 res
让我们看看以下实现以获得更好的理解:
示例
class Solution:
def solve(self, matrix):
matrix = sorted(matrix, key=lambda x: (x[0], -x[1]))
n = len(matrix)
heights = [float("inf")] * (n + 1)
heights[0] = float("-inf")
res = 0
for box in matrix:
cur_w, cur_h = box
index = self.insert_index(heights, cur_h)
if heights[index] >= cur_h:
heights[index] = cur_h
res = max(res, index)
return res
def insert_index(self, arr, this_h):
l = 0
r = len(arr) - 1
res = 0
while l <= r:
m = l + (r - l) // 2
cur_h = arr[m]
if cur_h < this_h:
res = m
l = m + 1
else:
r = m - 1
return res + 1
ob = Solution()
matrix = [
[12, 12],
[10, 10],
[6, 6],
[5, 10]
]
print(ob.solve(matrix))输入
matrix = [ [12, 12], [10, 10], [6, 6], [5, 10] ]
输出
3
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP