Sponsored
Sponsored
The first approach involves using a hashmap or dictionary to store diagonals. For any element at (i, j)
, the diagonal can be identified by the key (i - j)
. This key is unique to all elements on the same diagonal. We then collect each diagonal's elements into a list, sort them, and place them back into the matrix.
Time Complexity: O(m * n * log(min(m, n)))
due to the sorting of up to min(m, n)
elements for each diagonal.
Space Complexity: O(m * n)
for storing diagonal elements.
1from collections import defaultdict
2import heapq
3
4def diagonalSort(mat):
5 diagonals = defaultdict(list)
6 m, n = len(mat), len(mat[0])
7
8 for i in range(m):
9 for j in range(n):
10 heapq.heappush(diagonals[i - j], mat[i][j])
11
12 for i in range(m):
13 for j in range(n):
14 mat[i][j] = heapq.heappop(diagonals[i - j])
15
16 return mat
The Python solution uses a defaultdict
with lists turned into heaps using heapq
. After pushing all diagonal elements into respective heaps, they are popped in sorted order back into the matrix.
This approach aims to perform cross-diagonal sorting directly within the matrix itself, minimizing additional storage usage. By extracting diagonal elements one at a time, sorting them, and reinserting them, we achieve the diagonal sorting task with constrained space complexity.
Time Complexity: O(m * n * log(min(m, n)))
due to sorting operations.
Space Complexity: O(min(m, n))
for temporary diagonal storage.
1
This C code sorts diagonals in place without extra structures. It iterates over each diagonal from top row and left column, extracts, sorts, and reinserts elements back directly.