@@ -60,29 +60,29 @@ To take course 1 you should have finished course 0, and to take course 0 you sho
60
60
## Python
61
61
### Solution 1: Breadth-First Search
62
62
``` python
63
+ from collections import deque
64
+
63
65
class Solution :
64
66
def canFinish (self , num_courses : int , prerequisites : List[List[int ]]) -> bool :
67
+ courses_list = [set () for _ in range (num_courses)] # index: course, value: courses depend on course
65
68
in_degrees = [0 ] * num_courses
66
- courses_list = [set () for _ in range (num_courses)] # index: course, value: courses depending on course
67
-
68
- for prerequisite in prerequisites:
69
- in_degrees[prerequisite[0 ]] += 1
70
- courses_list[prerequisite[1 ]].add(prerequisite[0 ])
71
69
72
- ok_courses = collections.deque()
70
+ for course_item, course in prerequisites:
71
+ courses_list[course].add(course_item)
72
+ in_degrees[course_item] += 1
73
73
74
- for course, in_degree in enumerate (in_degrees):
75
- if in_degree == 0 :
76
- ok_courses.append(course )
74
+ ok_course_queue = deque(
75
+ [i for i, in_degree in enumerate (in_degrees) if in_degree == 0 ]
76
+ )
77
77
78
- while ok_courses :
79
- ok_course = ok_courses .popleft()
78
+ while ok_course_queue :
79
+ ok_course = ok_course_queue .popleft()
80
80
81
81
for course in courses_list[ok_course]:
82
82
in_degrees[course] -= 1
83
-
83
+
84
84
if in_degrees[course] == 0 :
85
- ok_courses .append(course)
85
+ ok_course_queue .append(course)
86
86
87
87
return sum (in_degrees) == 0
88
88
```
@@ -91,18 +91,14 @@ class Solution:
91
91
``` python
92
92
class Solution :
93
93
def canFinish (self , num_courses : int , prerequisites : List[List[int ]]) -> bool :
94
+ courses_list = [set () for _ in range (num_courses)] # index: course, value: courses depend on course
94
95
in_degrees = [0 ] * num_courses
95
- courses_list = [set () for _ in range (num_courses)] # index: course, value: courses depending on course
96
96
97
97
for prerequisite in prerequisites:
98
- in_degrees[prerequisite[0 ]] += 1
99
98
courses_list[prerequisite[1 ]].add(prerequisite[0 ])
99
+ in_degrees[prerequisite[0 ]] += 1
100
100
101
- ok_courses = []
102
-
103
- for course, in_degree in enumerate (in_degrees):
104
- if in_degree == 0 :
105
- ok_courses.append(course)
101
+ ok_courses = [i for i, in_degree in enumerate (in_degrees) if in_degree == 0 ]
106
102
107
103
while ok_courses:
108
104
ok_course = ok_courses.pop()
@@ -122,7 +118,7 @@ class Solution:
122
118
class Solution {
123
119
public boolean canFinish (int numCourses , int [][] prerequisites ) {
124
120
var inDegrees = new int [numCourses];
125
- var coursesList = new ArrayList<HashSet<Integer > > (); // index: course, value: courses depending on course
121
+ var coursesList = new ArrayList<HashSet<Integer > > (); // index: course, value: courses depend on course
126
122
for (var i = 0 ; i < numCourses; i++ ) {
127
123
coursesList. add(new HashSet<Integer > ());
128
124
}
@@ -166,7 +162,7 @@ class Solution {
166
162
class Solution {
167
163
public boolean canFinish (int numCourses , int [][] prerequisites ) {
168
164
var inDegrees = new int [numCourses];
169
- var coursesList = new ArrayList<HashSet<Integer > > (); // index: course, value: courses depending on course
165
+ var coursesList = new ArrayList<HashSet<Integer > > (); // index: course, value: courses depend on course
170
166
for (var i = 0 ; i < numCourses; i++ ) {
171
167
coursesList. add(new HashSet<Integer > ());
172
168
}
@@ -212,7 +208,7 @@ class Solution {
212
208
public:
213
209
bool canFinish(int num_courses, vector<vector<int >>& prerequisites) {
214
210
auto in_degrees = vector<int >(num_courses);
215
- auto courses_vector = vector<set<int >>(num_courses); // index: course, value: courses depending on course
211
+ auto courses_vector = vector<set<int >>(num_courses); // index: course, value: courses depend on course
216
212
217
213
for (auto& prerequisite : prerequisites) {
218
214
in_degrees[prerequisite[0]]++;
@@ -254,7 +250,7 @@ class Solution {
254
250
public:
255
251
bool canFinish(int num_courses, vector<vector<int >>& prerequisites) {
256
252
auto in_degrees = vector<int >(num_courses);
257
- auto courses_vector = vector<set<int >>(num_courses); // index: course, value: courses depending on course
253
+ auto courses_vector = vector<set<int >>(num_courses); // index: course, value: courses depend on course
258
254
259
255
for (auto& prerequisite : prerequisites) {
260
256
in_degrees[prerequisite[0]]++;
@@ -302,7 +298,7 @@ public class Solution {
302
298
public bool CanFinish (int numCourses , int [][] prerequisites )
303
299
{
304
300
var inDegrees = new int [numCourses ];
305
- var coursesList = new List <HashSet <int >>(); // index: course, value: courses depending on course
301
+ var coursesList = new List <HashSet <int >>(); // index: course, value: courses depend on course
306
302
307
303
for (int i = 0 ; i < numCourses ; i ++ )
308
304
coursesList .Add (new HashSet <int >());
@@ -353,7 +349,7 @@ public class Solution {
353
349
public bool CanFinish (int numCourses , int [][] prerequisites )
354
350
{
355
351
var inDegrees = new int [numCourses ];
356
- var coursesList = new List <HashSet <int >>(); // index: course, value: courses depending on course
352
+ var coursesList = new List <HashSet <int >>(); // index: course, value: courses depend on course
357
353
358
354
for (int i = 0 ; i < numCourses ; i ++ )
359
355
coursesList .Add (new HashSet <int >());
0 commit comments