Sort the Matrix Diagonally - Problem

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.

Input & Output

Example 1 — Basic 3x3 Matrix
$ 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]]
💡 Note: Main diagonal [3,2,1] becomes [1,2,3]. Diagonal starting at [0,1]: [3,2,1] becomes [1,2,3]. Each diagonal is sorted independently while maintaining structure.
Example 2 — Rectangular Matrix
$ 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]]
💡 Note: Each diagonal is sorted independently. The main diagonal [11,55,36,25,5] becomes [5,11,25,36,55].
Example 3 — Single Row
$ Input: mat = [[1,2,3,4]]
Output: [[1,2,3,4]]
💡 Note: Each element forms its own diagonal, so no sorting is needed. Matrix remains unchanged.

Constraints

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

Visualization

Tap to expand
Sort the Matrix Diagonally INPUT Original Matrix (3x4) 3 3 1 1 2 2 1 2 1 1 1 2 Diagonal Groups: i-j = 0: [3,2,1] i-j = -1: [3,1,1] i-j = -2: [1,2] i-j = -3: [1] i-j = 1: [2,1] i-j = 2: [1] mat = [[3,3,1,1], [2,2,1,2],[1,1,1,2]] ALGORITHM STEPS 1 Compute Key: i - j Each diagonal has unique key = row - column 2 Group by Key Store elements in HashMap key: i-j, value: elements HashMap 0 --> [3,2,1] -1 --> [3,1,1] -2 --> [1,2] -3 --> [1] 1 --> [2,1] 2 --> [1] 3 Sort Each List Sort values in ascending order for each key 4 Place Back Put sorted values back using same key mapping FINAL RESULT Sorted Matrix (3x4) 1 1 1 1 1 2 2 2 1 2 3 3 Sorted Diagonals: i-j=0: [1,2,3] (was [3,2,1]) i-j=-1: [1,1,3] (was [3,1,1]) i-j=-2: [1,2] (was [1,2]) i-j=-3: [1] (was [1]) i-j=1: [1,2] (was [2,1]) i-j=2: [1] (was [1]) Output: [[1,1,1,1], [1,2,2,2],[1,2,3,3]] Key Insight: All cells on the same diagonal share the same (row - column) value! This creates a unique key for grouping elements. Use a HashMap to collect diagonal elements, sort each group, then place them back. Time: O(m*n*log(min(m,n))), Space: O(m*n). TutorialsPoint - Sort the Matrix Diagonally | Coordinate Mapping Approach
Asked in
Facebook 35 Amazon 28 Google 22 Microsoft 18
25.0K Views
Medium Frequency
~15 min Avg. Time
892 Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen