LeetCode 1329. Sort the Matrix Diagonally Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
1329. Sort the Matrix Diagonally

Description

A matrix diagonal is a diagonal line of cells starting from some cell in either the topmost row or leftmost column and going in the bottom-right direction until reaching the matrix's end. For example, the matrix diagonal starting from mat[2][0], where mat is a 6 x 3 matrix, includes cells mat[2][0], mat[3][1], and mat[4][2].

Given an m x n matrix mat of integers, sort each matrix diagonal in ascending order and return the resulting matrix.

 

Example 1:

Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]]

Example 2:

Input: mat = [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]]
Output: [[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]]

 

Constraints:

  • m == mat.length
  • n == mat[i].length
  • 1 <= m, n <= 100
  • 1 <= mat[i][j] <= 100

Solutions

Solution 1: Sorting

We can treat each diagonal of the matrix as an array, sort these arrays, and then fill the sorted elements back into the original matrix.

Specifically, we denote the number of rows in the matrix as m and the number of columns as n. Since any two elements (i1, j1) and (i2, j2) on the same diagonal satisfy j1 - i1 = j2 - i2, we can determine each diagonal based on the value of j - i. To ensure the value is positive, we add an offset m, that is, m - i + j.

Finally, we fill the sorted elements of each diagonal back into the original matrix.

The time complexity is O(m × n × log min(m, n)), and the space complexity is O(m × n). Where m and n are the number of rows and columns in the matrix, respectively.

PythonJavaC++GoTypeScriptRustC#
class Solution: def diagonalSort(self, mat: List[List[int]]) -> List[List[int]]: m, n = len(mat), len(mat[0]) g = [[] for _ in range(m + n)] for i, row in enumerate(mat): for j, x in enumerate(row): g[m - i + j].append(x) for e in g: e.sort(reverse=True) for i in range(m): for j in range(n): mat[i][j] = g[m - i + j].pop() return mat(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !