Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public int[] findOrder(int numCourses, int[][] prerequisites) {
- HashSet<Integer> nodes = new HashSet<>();
- HashMap<Integer, HashSet<Integer>> deps = new HashMap<>();
- for (int i = 0; i < numCourses; i++) {
- nodes.add(i);
- deps.put(i, new HashSet<Integer>());
- }
- for (int[] req: prerequisites) {
- deps.get(req[0]).add(req[1]);
- }
- List<Integer> res = new ArrayList<>();
- while (nodes.size() > 0){
- HashSet<Integer> out = new HashSet<>();
- for (int node: nodes){
- if (deps.get(node).size() == 0) out.add(node);
- }
- if (out.size() == 0) return new int[0];
- nodes.removeAll(out);
- for (int node: nodes) deps.get(node).removeAll(out);
- res.addAll(out);
- }
- int[] result = new int[numCourses];
- for (int i = 0; i < numCourses; i++) result[i] = res.get(i);
- return result;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement