1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| class Solution {
/**
[[1,1,1,1],
[1,2,2,2],
[1,2,3,3]]
[[11,25,45,1,69,7],
[23,36,17,58,8,52],
[75,31,55,44,66,15],
[22,27,33,25,68,4],
[84,28,14,11,5,50]]
[22,27,31,36,50,66],
[84,28,75,33,55,68]]
*/
public int[][] diagonalSort(int[][] mat) {
int rows = mat.length;
int cols = mat[0].length;
for (int i = 0; i < rows; i++) {
sort(i, 0, mat);
}
for (int j = 0; j < cols; j++) {
sort(0, j, mat);
}
return mat;
}
void sort(int row, int col, int[][] mat) {
int rows = mat.length;
int cols = mat[0].length;
int[] freq = new int[101];
int i = row;
int j = col;
while (i < rows && j < cols) {
int val = mat[i][j];
freq[val]++;
i++;
j++;
}
i = row;
j = col;
int k = 0;
int index = 0;
while (i < rows && j < cols) {
while (freq[index] == 0) {
index++;
}
mat[i][j] = index;
freq[index]--;
i++;
j++;
k++;
}
}
void sort2(int row, int col, int[][] mat) {
int rows = mat.length;
int cols = mat[0].length;
List<Integer> diagonal = new ArrayList<>();
int i = row;
int j = col;
while (i < rows && j < cols) {
diagonal.add(mat[i][j]);
i++;
j++;
}
Collections.sort(diagonal);
i = row;
j = col;
int k = 0;
while (k < diagonal.size()) {
mat[i][j] = diagonal.get(k);
i++;
j++;
k++;
}
}
}
|