Skip to content

Commit 7518ae0

Browse files
authored
Update Sort the Matrix Diagonally.java
1 parent c08eebf commit 7518ae0

File tree

1 file changed

+38
-9
lines changed

1 file changed

+38
-9
lines changed
Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,45 @@
11
class Solution {
22
public int[][] diagonalSort(int[][] mat) {
3-
Map<Integer, PriorityQueue<Integer>> map = new HashMap<>();
4-
for (int i = 0; i < mat.length; i++) {
5-
for (int j = 0; j < mat[0].length; j++) {
6-
map.computeIfAbsent(i - j, k -> new PriorityQueue<>()).add(mat[i][j]);
7-
}
3+
int numRows = mat.length;
4+
int numCols = mat[0].length;
5+
for (int i = 0; i < numRows; i++) {
6+
sortDiagonal(i, 0, mat);
87
}
9-
for (int i = 0; i < mat.length; i++) {
10-
for (int j = 0; j < mat[0].length; j++) {
11-
mat[i][j] = map.get(i - j).poll();
12-
}
8+
for (int i = 0; i < numCols; i++) {
9+
sortDiagonal(0, i, mat);
1310
}
1411
return mat;
1512
}
13+
14+
private void sortDiagonal(int row, int col, int[][] mat) {
15+
int numRows = mat.length;
16+
int numCols = mat[0].length;
17+
List<Integer> diagonal = new ArrayList<>();
18+
int diagonalLength = Math.min(numRows - row, numCols - col);
19+
for (int i = 0; i < diagonalLength; i++) {
20+
diagonal.add(mat[row + i][col + i]);
21+
}
22+
diagonal = countingSort(diagonal);
23+
for (int i = 0; i < diagonalLength; i++) {
24+
mat[row + i][col + i] = diagonal.get(i);
25+
}
26+
}
27+
28+
private List<Integer> countingSort(List<Integer> list) {
29+
int min = 1;
30+
int max = 100;
31+
int range = max - min + 1;
32+
int[] frequency = new int[range];
33+
for (int num : list) {
34+
frequency[num - min]++;
35+
}
36+
List<Integer> sortedList = new ArrayList<>();
37+
for (int i = 0; i < range; i++) {
38+
int count = frequency[i];
39+
while (count-- > 0) {
40+
sortedList.add(i + min);
41+
}
42+
}
43+
return sortedList;
44+
}
1645
}

0 commit comments

Comments
 (0)