Skip to content

Commit 162b2d7

Browse files
authored
Update 1203-sort-items-by-groups-respecting-dependencies.js
1 parent dfc0ef6 commit 162b2d7

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

1203-sort-items-by-groups-respecting-dependencies.js

+49
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,52 @@
1+
/**
2+
* @param {number} n
3+
* @param {number} m
4+
* @param {number[]} group
5+
* @param {number[][]} beforeItems
6+
* @return {number[]}
7+
*/
8+
const sortItems = function (n, m, group, beforeItems) {
9+
const graph = Array.from({ length: m + n }, () => [])
10+
const indegree = Array(n + m).fill(0)
11+
for (let i = 0; i < group.length; i++) {
12+
if (group[i] == -1) continue
13+
graph[n + group[i]].push(i)
14+
indegree[i]++
15+
}
16+
for (let i = 0; i < beforeItems.length; i++) {
17+
for (let e of beforeItems[i]) {
18+
let a = group[e] === -1 ? e : n + group[e]
19+
let b = group[i] === -1 ? i : n + group[i]
20+
if (a === b) {
21+
// same group, ingroup order
22+
graph[e].push(i)
23+
indegree[i]++
24+
} else {
25+
// outgoup order
26+
graph[a].push(b)
27+
indegree[b]++
28+
}
29+
}
30+
}
31+
const res = []
32+
for (let i = 0; i < n + m; i++) {
33+
if (indegree[i] === 0) dfs(res, graph, indegree, n, i)
34+
}
35+
return res.length === n ? res : []
36+
37+
function dfs(ans, graph, indegree, n, cur) {
38+
if (cur < n) ans.push(cur)
39+
indegree[cur] = -1 // mark it visited
40+
for (let next of graph[cur] || []) {
41+
indegree[next]--
42+
if (indegree[next] === 0) dfs(ans, graph, indegree, n, next)
43+
}
44+
}
45+
}
46+
47+
// another
48+
49+
150
/**
251
* @param {number} n
352
* @param {number} m

0 commit comments

Comments
 (0)