Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでシャッフルされた人々のキューを回復するプログラム


各行に2つの値[height、count]が含まれている2Dマトリックスがあるとします。これらは、人が身長を指定し、その前に少なくとも同じ高さの人が「count」人いることを示します。ここで、このキューがシャッフルされていると考えてください。キューの元の順序を復元する必要があります。

したがって、入力が次のような場合

2
2
4
0
5
0

その場合、出力は次のようになります

4
0
5
0
2
2

これを解決するには、次の手順に従います。

  • N:=行列の行数
  • 高さの増加とカウントの減少に基づいて行列の行を再配置します
  • ans:=サイズNのリストを作成し、最初はすべてのエントリがnullです
  • 高さhごとに、行列行のcを数えます。
    • temp:=0
    • 各インデックスi、および値num ansについて、実行します
      • temp> =cで、numがnullの場合、
        • ans [i]:=[h、c]
        • ループから抜け出す
      • numがnullまたはnum[0]>=hの場合、
        • temp:=temp + 1
  • 回答を返す

理解を深めるために、次の実装を見てみましょう。

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]]

  1. Pythonで頂点から頂点への到達可能性マトリックスを計算するプログラム

    隣接リスト表現としてグラフがあるとすると、2D行列Mを見つける必要があります。ここで 頂点iとjの間にパスがある場合、M [i、j]=1です。 それ以外の場合はM[i、j]=0です。 したがって、入力が次のような場合 その場合、出力は次のようになります 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 これを解決するには、次の手順に従います- ans:=サイズn x nの2次元行列。こ

  2. 行列の転置を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 行列が与えられた場合、転置を同じ行列に格納して表示する必要があります。 行列の転置は、行を列に、列を行に変更することで得られます。つまり、A行列の転置はA[i][j]をA[j][i]に変更することで得られます。 以下に示す実装を見てみましょう- 例 N = 4 def transpose(A):    for i in range(N):       for j in range(i+1, N):     &nbs