Python程序恢复打乱的人员队列


假设我们有一个二维矩阵,每一行包含两个值 [身高,人数],表示该人的身高以及至少与该人身高相同的人数。

现在假设这个队列被打乱了,我们需要恢复队列的原始顺序。

2
2
4
0
5
0

例如,如果输入是:

4
0
5
0
2
2

那么输出将是:

  • 为了解决这个问题,我们将遵循以下步骤:
  • N := 矩阵的行数
  • 根据身高递增和人数递减重新排列矩阵行
  • ans := 创建一个大小为 N 的列表,初始所有条目均为空
    • 对于矩阵每一行中的身高 h 和人数 c,执行以下操作:
    • temp := 0
      • 对于每个索引 i 和值 num ans,执行以下操作:
        • 如果 temp >= c 且 num 为空,则
        • ans[i] := [h, c]
      • 退出循环
        • 如果 num 为空或 num[0] >= h,则
  • temp := temp + 1

返回 ans

让我们来看下面的实现来更好地理解

示例

class Solution:
   def solve(self, matrix):
      N = len(matrix)
      matrix.sort(key=lambda x: [x[0], -x[1]])
      ans = [None] * N

      for h, c in matrix:
         temp = 0
         for i, num in enumerate(ans):
            if temp >= c and num is None:
               ans[i] = [h, c]
               break

            if num is None or num[0] >= h:
               temp += 1
      return ans

ob = Solution()
matrix = [
   [2, 2],
   [4, 0],
   [5, 0]
]
print(ob.solve(matrix))

在线演示

[[2, 2],[4, 0],[5, 0]]

输入

[[4, 0], [5, 0], [2, 2]]

Arnab Chakraborty

更新于:2020-11-26

Python中使用queue和heapdict模块的优先队列

开启你的职业生涯

完成课程获得认证
打印页面