Skip to content

Commit 473f1d0

Browse files
authored
Create 2392-build-a-matrix-with-conditions.js
1 parent 3d25df3 commit 473f1d0

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed
+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/**
2+
* @param {number} k
3+
* @param {number[][]} rowConditions
4+
* @param {number[][]} colConditions
5+
* @return {number[][]}
6+
*/
7+
const initializeGraph = (n) => {
8+
let g = []
9+
for (let i = 0; i < n; i++) {
10+
g.push([])
11+
}
12+
return g
13+
}
14+
const packDGInDegree = (g, edges, indegree) => {
15+
for (const [u, v] of edges) {
16+
g[u].unshift(v)
17+
indegree[v]++
18+
}
19+
}
20+
const initialize2DArray = (n, m) => {
21+
let d = []
22+
for (let i = 0; i < n; i++) {
23+
let t = Array(m).fill(0)
24+
d.push(t)
25+
}
26+
return d
27+
}
28+
29+
const buildMatrix = (k, rowConditions, colConditions) => {
30+
let gr = make(k, rowConditions),
31+
gc = make(k, colConditions),
32+
d = initialize2DArray(k, 2),
33+
res = initialize2DArray(k, k)
34+
if (gr.length == 0 || gc.length == 0) return []
35+
for (let i = 0; i < k; i++) {
36+
d[gr[i] - 1][0] = i
37+
d[gc[i] - 1][1] = i
38+
}
39+
for (let i = 0; i < k; i++) {
40+
let [x, y] = d[i]
41+
res[x][y] = i + 1
42+
}
43+
return res
44+
}
45+
46+
const make = (n, edges) => {
47+
let g = initializeGraph(n + 1),
48+
deg = Array(n + 1).fill(0)
49+
packDGInDegree(g, edges, deg)
50+
return topologicalSort_start_1(g, deg)
51+
}
52+
53+
const topologicalSort_start_1 = (g, indegree) => {
54+
let res = [],
55+
q = [],
56+
n = g.length - 1
57+
for (let i = 1; i <= n; i++) {
58+
if (indegree[i] == 0) q.push(i)
59+
}
60+
while (q.length) {
61+
let cur = q.shift()
62+
res.push(cur)
63+
for (const child of g[cur]) {
64+
indegree[child]--
65+
if (indegree[child] == 0) q.push(child)
66+
}
67+
}
68+
for (let i = 1; i <= n; i++) {
69+
if (indegree[i] > 0) return []
70+
}
71+
return res
72+
}

0 commit comments

Comments
 (0)