File tree 1 file changed +34
-0
lines changed
1 file changed +34
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ fun checkIfPrerequisite (
3
+ numCourses : Int ,
4
+ prerequisites : Array <IntArray >,
5
+ queries : Array <IntArray >
6
+ ): List <Boolean > {
7
+ // { course -> [ immediate pre-requisites ] }
8
+ val adjacencyList = mutableMapOf<Int , MutableList <Int >>()
9
+ prerequisites.forEach { (immediatePrerequisite, course) ->
10
+ adjacencyList.getOrPut(course) { mutableListOf () }.add(immediatePrerequisite)
11
+ }
12
+ // { course -> [ complete set of prerequisites including transitive pre-requisites ] }
13
+ val prerequisitesMap = mutableMapOf<Int , HashSet <Int >>()
14
+ fun dfs (startCourse : Int , currentCourse : Int = startCourse) {
15
+ if (currentCourse in (prerequisitesMap[startCourse] ? : hashSetOf())) return
16
+ if (currentCourse != startCourse) {
17
+ prerequisitesMap.getOrPut(startCourse) { hashSetOf() }.add(currentCourse)
18
+ }
19
+ for (immediatePrerequisite in adjacencyList[currentCourse] ? : mutableListOf ()) {
20
+ dfs(startCourse, immediatePrerequisite)
21
+ }
22
+ }
23
+
24
+ for (course in 0 until numCourses) {
25
+ dfs(startCourse = course)
26
+ }
27
+
28
+ val resultantList = mutableListOf<Boolean >()
29
+ queries.forEach { (prerequisite, course) ->
30
+ resultantList.add(prerequisitesMap[course]?.let { prerequisite in it } ? : false )
31
+ }
32
+ return resultantList
33
+ }
34
+ }
You can’t perform that action at this time.
0 commit comments