Sort the Matrix Diagonally

MediumArraySortingMatrix

Solution

export function diagonalSort(mat: number[][]): number[][] {
  const [m, n] = [mat.length, mat[0].length];
  const diagonals = new Map<number, number[]>();
  mat.forEach((row, i) => {
    row.forEach((num, j) => {
      const nums = diagonals.get(i - j) ?? [];
      nums.push(num);
      diagonals.set(i - j, nums);
    });
  });
 
  diagonals.forEach((nums) => {
    nums.sort((a, b) => b - a);
  });
 
  for (let i = 0; i < m; i++) {
    for (let j = 0; j < n; j++) {
      mat[i][j] = diagonals.get(i - j)!.pop()!;
    }
  }
  return mat;
}