
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 matThe 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.