Skip to content

Commit b9ecf44

Browse files
committed
207-course-schedule.md Perfected code.
1 parent 175f9df commit b9ecf44

File tree

2 files changed

+44
-52
lines changed

2 files changed

+44
-52
lines changed

en/1-1000/207-course-schedule.md

+22-26
Original file line numberDiff line numberDiff line change
@@ -60,29 +60,29 @@ To take course 1 you should have finished course 0, and to take course 0 you sho
6060
## Python
6161
### Solution 1: Breadth-First Search
6262
```python
63+
from collections import deque
64+
6365
class Solution:
6466
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
6568
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])
7169

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
7373

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+
)
7777

78-
while ok_courses:
79-
ok_course = ok_courses.popleft()
78+
while ok_course_queue:
79+
ok_course = ok_course_queue.popleft()
8080

8181
for course in courses_list[ok_course]:
8282
in_degrees[course] -= 1
83-
83+
8484
if in_degrees[course] == 0:
85-
ok_courses.append(course)
85+
ok_course_queue.append(course)
8686

8787
return sum(in_degrees) == 0
8888
```
@@ -91,18 +91,14 @@ class Solution:
9191
```python
9292
class Solution:
9393
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
9495
in_degrees = [0] * num_courses
95-
courses_list = [set() for _ in range(num_courses)] # index: course, value: courses depending on course
9696

9797
for prerequisite in prerequisites:
98-
in_degrees[prerequisite[0]] += 1
9998
courses_list[prerequisite[1]].add(prerequisite[0])
99+
in_degrees[prerequisite[0]] += 1
100100

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]
106102

107103
while ok_courses:
108104
ok_course = ok_courses.pop()
@@ -122,7 +118,7 @@ class Solution:
122118
class Solution {
123119
public boolean canFinish(int numCourses, int[][] prerequisites) {
124120
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
126122
for (var i = 0; i < numCourses; i++) {
127123
coursesList.add(new HashSet<Integer>());
128124
}
@@ -166,7 +162,7 @@ class Solution {
166162
class Solution {
167163
public boolean canFinish(int numCourses, int[][] prerequisites) {
168164
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
170166
for (var i = 0; i < numCourses; i++) {
171167
coursesList.add(new HashSet<Integer>());
172168
}
@@ -212,7 +208,7 @@ class Solution {
212208
public:
213209
bool canFinish(int num_courses, vector<vector<int>>& prerequisites) {
214210
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
216212

217213
for (auto& prerequisite : prerequisites) {
218214
in_degrees[prerequisite[0]]++;
@@ -254,7 +250,7 @@ class Solution {
254250
public:
255251
bool canFinish(int num_courses, vector<vector<int>>& prerequisites) {
256252
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
258254

259255
for (auto& prerequisite : prerequisites) {
260256
in_degrees[prerequisite[0]]++;
@@ -302,7 +298,7 @@ public class Solution {
302298
public bool CanFinish(int numCourses, int[][] prerequisites)
303299
{
304300
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
306302
307303
for (int i = 0; i < numCourses; i++)
308304
coursesList.Add(new HashSet<int>());
@@ -353,7 +349,7 @@ public class Solution {
353349
public bool CanFinish(int numCourses, int[][] prerequisites)
354350
{
355351
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
357353
358354
for (int i = 0; i < numCourses; i++)
359355
coursesList.Add(new HashSet<int>());

zh/1-1000/207-course-schedule.md

+22-26
Original file line numberDiff line numberDiff line change
@@ -60,29 +60,29 @@ To take course 1 you should have finished course 0, and to take course 0 you sho
6060
## Python
6161
### Solution 1: Breadth-First Search
6262
```python
63+
from collections import deque
64+
6365
class Solution:
6466
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
6568
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])
7169

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
7373

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+
)
7777

78-
while ok_courses:
79-
ok_course = ok_courses.popleft()
78+
while ok_course_queue:
79+
ok_course = ok_course_queue.popleft()
8080

8181
for course in courses_list[ok_course]:
8282
in_degrees[course] -= 1
83-
83+
8484
if in_degrees[course] == 0:
85-
ok_courses.append(course)
85+
ok_course_queue.append(course)
8686

8787
return sum(in_degrees) == 0
8888
```
@@ -91,18 +91,14 @@ class Solution:
9191
```python
9292
class Solution:
9393
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
9495
in_degrees = [0] * num_courses
95-
courses_list = [set() for _ in range(num_courses)] # index: course, value: courses depending on course
9696

9797
for prerequisite in prerequisites:
98-
in_degrees[prerequisite[0]] += 1
9998
courses_list[prerequisite[1]].add(prerequisite[0])
99+
in_degrees[prerequisite[0]] += 1
100100

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]
106102

107103
while ok_courses:
108104
ok_course = ok_courses.pop()
@@ -122,7 +118,7 @@ class Solution:
122118
class Solution {
123119
public boolean canFinish(int numCourses, int[][] prerequisites) {
124120
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
126122
for (var i = 0; i < numCourses; i++) {
127123
coursesList.add(new HashSet<Integer>());
128124
}
@@ -166,7 +162,7 @@ class Solution {
166162
class Solution {
167163
public boolean canFinish(int numCourses, int[][] prerequisites) {
168164
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
170166
for (var i = 0; i < numCourses; i++) {
171167
coursesList.add(new HashSet<Integer>());
172168
}
@@ -212,7 +208,7 @@ class Solution {
212208
public:
213209
bool canFinish(int num_courses, vector<vector<int>>& prerequisites) {
214210
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
216212

217213
for (auto& prerequisite : prerequisites) {
218214
in_degrees[prerequisite[0]]++;
@@ -254,7 +250,7 @@ class Solution {
254250
public:
255251
bool canFinish(int num_courses, vector<vector<int>>& prerequisites) {
256252
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
258254

259255
for (auto& prerequisite : prerequisites) {
260256
in_degrees[prerequisite[0]]++;
@@ -302,7 +298,7 @@ public class Solution {
302298
public bool CanFinish(int numCourses, int[][] prerequisites)
303299
{
304300
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
306302
307303
for (int i = 0; i < numCourses; i++)
308304
coursesList.Add(new HashSet<int>());
@@ -353,7 +349,7 @@ public class Solution {
353349
public bool CanFinish(int numCourses, int[][] prerequisites)
354350
{
355351
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
357353
358354
for (int i = 0; i < numCourses; i++)
359355
coursesList.Add(new HashSet<int>());

0 commit comments

Comments
 (0)