Skip to content

Commit c0cb11c

Browse files
committed
feat: update solutions to lc problems: No.0207,0210
* No.0207.Course Schedule * No.0210.Course Schedule II
1 parent 51c8aac commit c0cb11c

File tree

14 files changed

+434
-498
lines changed

14 files changed

+434
-498
lines changed

solution/0200-0299/0207.Course Schedule/README.md

Lines changed: 65 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -61,22 +61,22 @@ class Solution:
6161
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
6262
edges = defaultdict(list)
6363
indegree = [0] * numCourses
64-
for i, j in prerequisites:
65-
edges[j].append(i)
66-
indegree[i] += 1
64+
for a, b in prerequisites:
65+
edges[b].append(a)
66+
indegree[a] += 1
6767
q = deque()
6868
for i in range(numCourses):
6969
if indegree[i] == 0:
7070
q.append(i)
71-
cnt = 0
71+
n = 0
7272
while q:
73-
i = q.popleft()
74-
cnt += 1
75-
for j in edges[i]:
76-
indegree[j] -= 1
77-
if indegree[j] == 0:
78-
q.append(j)
79-
return cnt == numCourses
73+
b = q.popleft()
74+
n += 1
75+
for a in edges[b]:
76+
indegree[a] -= 1
77+
if indegree[a] == 0:
78+
q.append(a)
79+
return n == numCourses
8080
```
8181

8282
### **Java**
@@ -92,27 +92,27 @@ class Solution {
9292
}
9393
int[] indegree = new int[numCourses];
9494
for (int[] p : prerequisites) {
95-
edges[p[1]].add(p[0]);
96-
++indegree[p[0]];
95+
int a = p[0], b = p[1];
96+
edges[b].add(a);
97+
++indegree[a];
9798
}
9899
Queue<Integer> q = new LinkedList<>();
99100
for (int i = 0; i < numCourses; ++i) {
100101
if (indegree[i] == 0) {
101102
q.offer(i);
102103
}
103104
}
104-
int cnt = 0;
105+
int n = 0;
105106
while (!q.isEmpty()) {
106-
int i = q.poll();
107-
++cnt;
108-
for (int j : edges[i]) {
109-
--indegree[j];
110-
if (indegree[j] == 0) {
111-
q.offer(j);
107+
int b = q.poll();
108+
++n;
109+
for (int a : edges[b]) {
110+
if (--indegree[a] == 0) {
111+
q.offer(a);
112112
}
113113
}
114114
}
115-
return cnt == numCourses;
115+
return n == numCourses;
116116
}
117117
}
118118
```
@@ -159,29 +159,27 @@ public:
159159
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
160160
vector<vector<int>> edges(numCourses);
161161
vector<int> indegree(numCourses);
162-
for (auto p : prerequisites)
162+
for (auto& p : prerequisites)
163163
{
164-
edges[p[1]].push_back(p[0]);
165-
++indegree[p[0]];
164+
int a = p[0], b = p[1];
165+
edges[b].push_back(a);
166+
++indegree[a];
166167
}
167168
queue<int> q;
168169
for (int i = 0; i < numCourses; ++i)
169-
{
170-
if (indegree[i] == 0) q.push(i);
171-
}
172-
int cnt = 0;
170+
if (indegree[i] == 0)
171+
q.push(i);
172+
int n = 0;
173173
while (!q.empty())
174174
{
175-
int i = q.front();
175+
int b = q.front();
176176
q.pop();
177-
++cnt;
178-
for (int j : edges[i])
179-
{
180-
--indegree[j];
181-
if (indegree[j] == 0) q.push(j);
182-
}
177+
++n;
178+
for (int a : edges[b])
179+
if (--indegree[a] == 0)
180+
q.push(a);
183181
}
184-
return cnt == numCourses;
182+
return n == numCourses;
185183
}
186184
};
187185
```
@@ -193,76 +191,66 @@ func canFinish(numCourses int, prerequisites [][]int) bool {
193191
edges := make([][]int, numCourses)
194192
indegree := make([]int, numCourses)
195193
for _, p := range prerequisites {
196-
edges[p[1]] = append(edges[p[1]], p[0])
197-
indegree[p[0]]++
194+
a, b := p[0], p[1]
195+
edges[b] = append(edges[b], a)
196+
indegree[a]++
198197
}
199198
var q []int
200199
for i := 0; i < numCourses; i++ {
201200
if indegree[i] == 0 {
202201
q = append(q, i)
203202
}
204203
}
205-
cnt := 0
204+
n := 0
206205
for len(q) > 0 {
207-
i := q[0]
206+
b := q[0]
208207
q = q[1:]
209-
cnt++
210-
for _, j := range edges[i] {
211-
indegree[j]--
212-
if indegree[j] == 0 {
213-
q = append(q, j)
208+
n++
209+
for _, a := range edges[b] {
210+
indegree[a]--
211+
if indegree[a] == 0 {
212+
q = append(q, a)
214213
}
215214
}
216215
}
217-
return cnt == numCourses
216+
return n == numCourses
218217
}
219218
```
220219

221220
### **C#**
222221

223222
```cs
224-
using System.Collections.Generic;
225-
226223
public class Solution {
227224
public bool CanFinish(int numCourses, int[][] prerequisites) {
225+
var edges = new List<int>[numCourses];
226+
for (int i = 0; i < numCourses; ++i)
227+
{
228+
edges[i] = new List<int>();
229+
}
228230
var indegree = new int[numCourses];
229-
var edgeCount = prerequisites.Length;
230-
var edge = new List<int>[numCourses];
231-
for (var i = 0; i < edgeCount; ++i)
231+
for (int i = 0; i < prerequisites.Length; ++i)
232232
{
233-
var child = prerequisites[i][0];
234-
var parent = prerequisites[i][1];
235-
if (edge[parent] == null)
236-
{
237-
edge[parent] = new List<int>();
238-
}
239-
edge[parent].Add(child);
240-
++indegree[child];
233+
int a = prerequisites[i][0];
234+
int b = prerequisites[i][1];
235+
edges[b].Add(a);
236+
++indegree[a];
241237
}
242-
243-
var queue = new Queue<int>();
244-
for (var i = 0; i < numCourses; ++i)
238+
var q = new Queue<int>();
239+
for (int i = 0; i < numCourses; ++i)
245240
{
246-
if (indegree[i] == 0) queue.Enqueue(i);
241+
if (indegree[i] == 0) q.Enqueue(i);
247242
}
248-
249-
var count = 0;
250-
while (queue.Count > 0)
243+
var n = 0;
244+
while (q.Count > 0)
251245
{
252-
var node = queue.Dequeue();
253-
++count;
254-
if (edge[node] != null)
246+
int b = q.Dequeue();
247+
++n;
248+
foreach (int a in edges[b])
255249
{
256-
foreach (var next in edge[node])
257-
{
258-
if (--indegree[next] == 0)
259-
{
260-
queue.Enqueue(next);
261-
}
262-
}
250+
if (--indegree[a] == 0) q.Enqueue(a);
263251
}
264252
}
265-
return count == numCourses;
253+
return n == numCourses;
266254
}
267255
}
268256
```

0 commit comments

Comments
 (0)