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模組的優先佇列

開啟你的職業生涯

完成課程獲得認證
列印頁面