Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // https://leetcode.com/explore/learn/card/graph/623/kahns-algorithm-for-topological-sorting/3868/
- /**
- * @param {number} numCourses
- * @param {number[][]} prerequisites
- * @return {number[]}
- */
- var findOrder = function(n, classes) {
- // There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1. You are given an array prerequisites where prerequisites[i] = [ai, bi] indicates that you must take course bi first if you want to take course ai.
- const adj = [...Array(n)].map(()=>new Set());
- for(const [a, b] of classes) {
- adj[a].add(b); // indegree // incoming
- }
- const que = [];
- for(let i=0; i<adj.length; i++) {
- let set = adj[i];
- if(set.size == 0) {
- que.push(i);
- }
- }
- if(!que.length) return [];
- let ans = [];
- while(que.length) {
- const node = que.shift();
- ans.push(node);
- for(let i=0; i<adj.length; i++) {
- const set = adj[i];
- if(set.has(node)) {
- set.delete(node);
- if(set.size == 0) {
- que.push(i);
- }
- }
- }
- }
- for(let i=0; i<adj.length; i++) {
- if(adj[i].size > 0) return [];
- }
- return ans;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement