Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d93e676

Browse files
committed
feat: update solutions to lc/lcof2 problems
* lc No.0207.Course Schedule * lc No.0210.Course Schedule II * lcof2 No.113.Course Schedule II
1 parent 9405562 commit d93e676

File tree

23 files changed

+624
-717
lines changed

23 files changed

+624
-717
lines changed

‎lcof2/剑指 Offer II 113. 课程顺序/README.md‎

Lines changed: 75 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -69,23 +69,20 @@
6969
```python
7070
class Solution:
7171
def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
72-
edges = defaultdict(list)
73-
indegree = [0] * numCourses
72+
g = defaultdict(list)
73+
indeg = [0] * numCourses
7474
for a, b in prerequisites:
75-
edges[b].append(a)
76-
indegree[a] += 1
77-
q = deque()
78-
for i in range(numCourses):
79-
if indegree[i] == 0:
80-
q.append(i)
75+
g[b].append(a)
76+
indeg[a] += 1
77+
q = deque([i for i, v in enumerate(indeg) if v == 0])
8178
ans = []
8279
while q:
83-
b = q.popleft()
84-
ans.append(b)
85-
for a in edges[b]:
86-
indegree[a] -= 1
87-
if indegree[a] == 0:
88-
q.append(a)
80+
i = q.popleft()
81+
ans.append(i)
82+
for j in g[i]:
83+
indeg[j] -= 1
84+
if indeg[j] == 0:
85+
q.append(j)
8986
return ans if len(ans) == numCourses else []
9087
```
9188

@@ -96,34 +93,34 @@ class Solution:
9693
```java
9794
class Solution {
9895
public int[] findOrder(int numCourses, int[][] prerequisites) {
99-
List<Integer>[] edges = new List[numCourses];
96+
List<Integer>[] g = new List[numCourses];
10097
for (int i = 0; i < numCourses; ++i) {
101-
edges[i] = new ArrayList<>();
98+
g[i] = new ArrayList<>();
10299
}
103-
int[] indegree = new int[numCourses];
104-
for (int[] p : prerequisites) {
100+
int[] indeg = new int[numCourses];
101+
for (var p : prerequisites) {
105102
int a = p[0], b = p[1];
106-
edges[b].add(a);
107-
++indegree[a];
103+
g[b].add(a);
104+
++indeg[a];
108105
}
109-
Queue<Integer> q = new LinkedList<>();
106+
Deque<Integer> q = new ArrayDeque<>();
110107
for (int i = 0; i < numCourses; ++i) {
111-
if (indegree[i] == 0) {
108+
if (indeg[i] == 0) {
112109
q.offer(i);
113110
}
114111
}
115112
int[] ans = new int[numCourses];
116-
int n = 0;
113+
int cnt = 0;
117114
while (!q.isEmpty()) {
118-
int b = q.poll();
119-
ans[n++] = b;
120-
for (int a : edges[b]) {
121-
if (--indegree[a] == 0) {
122-
q.offer(a);
115+
int i = q.poll();
116+
ans[cnt++] = i;
117+
for (int j : g[i]) {
118+
if (--indeg[j] == 0) {
119+
q.offer(j);
123120
}
124121
}
125122
}
126-
return n == numCourses ? ans : new int[0];
123+
return cnt == numCourses ? ans : new int[0];
127124
}
128125
}
129126
```
@@ -132,28 +129,25 @@ class Solution {
132129

133130
```ts
134131
function findOrder(numCourses: number, prerequisites: number[][]): number[] {
135-
let edges = Array.from({ length: numCourses }, () => []);
132+
let g = Array.from({ length: numCourses }, () => []);
136133
let indeg = new Array(numCourses).fill(0);
137-
for (let [b, a] of prerequisites) {
138-
edges[a].push(b);
139-
indeg[b] +=1;
134+
for (let [a, b] of prerequisites) {
135+
g[b].push(a);
136+
++indeg[a];
140137
}
141-
142-
let queue = [];
143-
for (let i = 0; i < numCourses; i++) {
138+
let q = [];
139+
for (let i = 0; i < numCourses; ++i) {
144140
if (!indeg[i]) {
145-
queue.push(i);
141+
q.push(i);
146142
}
147143
}
148-
149144
let ans = [];
150-
while (queue.length) {
151-
const u = queue.shift();
152-
ans.push(u);
153-
for (let v of edges[u]) {
154-
indeg[v] -= 1;
155-
if (!indeg[v]) {
156-
queue.push(v);
145+
while (q.length) {
146+
const i = q.shift();
147+
ans.push(i);
148+
for (let j of g[i]) {
149+
if (--indeg[j] == 0) {
150+
q.push(j);
157151
}
158152
}
159153
}
@@ -167,27 +161,23 @@ function findOrder(numCourses: number, prerequisites: number[][]): number[] {
167161
class Solution {
168162
public:
169163
vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
170-
vector<vector<int>> edges(numCourses);
171-
vector<int> indegree(numCourses);
164+
vector<vector<int>> g(numCourses);
165+
vector<int> indeg(numCourses);
172166
for (auto& p : prerequisites)
173167
{
174168
int a = p[0], b = p[1];
175-
edges[b].push_back(a);
176-
++indegree[a];
169+
g[b].push_back(a);
170+
++indeg[a];
177171
}
178172
queue<int> q;
179-
for (int i = 0; i < numCourses; ++i)
180-
if (indegree[i] == 0)
181-
q.push(i);
173+
for (int i = 0; i < numCourses; ++i) if (indeg[i] == 0) q.push(i);
182174
vector<int> ans;
183175
while (!q.empty())
184176
{
185-
int b = q.front();
177+
int i = q.front();
186178
q.pop();
187-
ans.push_back(b);
188-
for (int a : edges[b])
189-
if (--indegree[a] == 0)
190-
q.push(a);
179+
ans.push_back(i);
180+
for (int j : g[i]) if (--indeg[j] == 0) q.push(j);
191181
}
192182
return ans.size() == numCourses ? ans : vector<int>();
193183
}
@@ -198,28 +188,28 @@ public:
198188
199189
```go
200190
func findOrder(numCourses int, prerequisites [][]int) []int {
201-
edges := make([][]int, numCourses)
202-
indegree := make([]int, numCourses)
191+
g := make([][]int, numCourses)
192+
indeg := make([]int, numCourses)
203193
for _, p := range prerequisites {
204194
a, b := p[0], p[1]
205-
edges[b] = append(edges[b], a)
206-
indegree[a]++
195+
g[b] = append(g[b], a)
196+
indeg[a]++
207197
}
208-
var q []int
209-
for i:= 0; i < numCourses; i++ {
210-
if indegree[i] == 0 {
198+
q := []int{}
199+
for i, v := range indeg {
200+
if v == 0 {
211201
q = append(q, i)
212202
}
213203
}
214-
var ans []int
204+
ans := []int{}
215205
for len(q) > 0 {
216-
b := q[0]
206+
i := q[0]
217207
q = q[1:]
218-
ans = append(ans, b)
219-
for _, a := range edges[b] {
220-
indegree[a]--
221-
if indegree[a] == 0 {
222-
q = append(q, a)
208+
ans = append(ans, i)
209+
for _, j := range g[i] {
210+
indeg[j]--
211+
if indeg[j] == 0 {
212+
q = append(q, j)
223213
}
224214
}
225215
}
@@ -235,36 +225,35 @@ func findOrder(numCourses int, prerequisites [][]int) []int {
235225
```cs
236226
public class Solution {
237227
public int[] FindOrder(int numCourses, int[][] prerequisites) {
238-
var edges = new List<int>[numCourses];
228+
var g = new List<int>[numCourses];
239229
for (int i = 0; i < numCourses; ++i)
240230
{
241-
edges[i] = new List<int>();
231+
g[i] = new List<int>();
242232
}
243-
var indegree = new int[numCourses];
244-
for (inti=0; i<prerequisites.Length; ++i)
233+
var indeg = new int[numCourses];
234+
foreach (varpinprerequisites)
245235
{
246-
int a = prerequisites[i][0];
247-
int b = prerequisites[i][1];
248-
edges[b].Add(a);
249-
++indegree[a];
236+
int a = p[0], b = p[1];
237+
g[b].Add(a);
238+
++indeg[a];
250239
}
251240
var q = new Queue<int>();
252241
for (int i = 0; i < numCourses; ++i)
253242
{
254-
if (indegree[i] == 0) q.Enqueue(i);
243+
if (indeg[i] == 0) q.Enqueue(i);
255244
}
256245
var ans = new int[numCourses];
257-
var n = 0;
246+
var cnt = 0;
258247
while (q.Count > 0)
259248
{
260-
int b = q.Dequeue();
261-
ans[n++] = b;
262-
foreach (int a in edges[b])
249+
int i = q.Dequeue();
250+
ans[cnt++] = i;
251+
foreach (int j in g[i])
263252
{
264-
if (--indegree[a] == 0) q.Enqueue(a);
253+
if (--indeg[j] == 0) q.Enqueue(j);
265254
}
266255
}
267-
return n == numCourses ? ans : new int[0];
256+
return cnt == numCourses ? ans : new int[0];
268257
}
269258
}
270259
```

‎lcof2/剑指 Offer II 113. 课程顺序/Solution.cpp‎

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,23 @@
11
class Solution {
22
public:
33
vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
4-
vector<vector<int>> edges(numCourses);
5-
vector<int> indegree(numCourses);
4+
vector<vector<int>> g(numCourses);
5+
vector<int> indeg(numCourses);
66
for (auto& p : prerequisites)
77
{
88
int a = p[0], b = p[1];
9-
edges[b].push_back(a);
10-
++indegree[a];
9+
g[b].push_back(a);
10+
++indeg[a];
1111
}
1212
queue<int> q;
13-
for (int i = 0; i < numCourses; ++i)
14-
if (indegree[i] == 0)
15-
q.push(i);
13+
for (int i = 0; i < numCourses; ++i) if (indeg[i] == 0) q.push(i);
1614
vector<int> ans;
1715
while (!q.empty())
1816
{
19-
int b = q.front();
17+
int i = q.front();
2018
q.pop();
21-
ans.push_back(b);
22-
for (int a : edges[b])
23-
{
24-
--indegree[a];
25-
if (indegree[a] == 0) q.push(a);
26-
}
19+
ans.push_back(i);
20+
for (int j : g[i]) if (--indeg[j] == 0) q.push(j);
2721
}
2822
return ans.size() == numCourses ? ans : vector<int>();
2923
}
Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,33 @@
11
public class Solution {
22
public int[] FindOrder(int numCourses, int[][] prerequisites) {
3-
var edges = new List<int>[numCourses];
3+
var g = new List<int>[numCourses];
44
for (int i = 0; i < numCourses; ++i)
55
{
6-
edges[i] = new List<int>();
6+
g[i] = new List<int>();
77
}
8-
var indegree = new int[numCourses];
9-
for(inti=0;i<prerequisites.Length;++i)
8+
var indeg = new int[numCourses];
9+
foreach(varpinprerequisites)
1010
{
11-
int a = prerequisites[i][0];
12-
int b = prerequisites[i][1];
13-
edges[b].Add(a);
14-
++indegree[a];
11+
int a = p[0], b = p[1];
12+
g[b].Add(a);
13+
++indeg[a];
1514
}
1615
var q = new Queue<int>();
1716
for (int i = 0; i < numCourses; ++i)
1817
{
19-
if (indegree[i] == 0) q.Enqueue(i);
18+
if (indeg[i] == 0) q.Enqueue(i);
2019
}
2120
var ans = new int[numCourses];
22-
var n = 0;
21+
var cnt = 0;
2322
while (q.Count > 0)
2423
{
25-
int b = q.Dequeue();
26-
ans[n++] = b;
27-
foreach (int a in edges[b])
24+
int i = q.Dequeue();
25+
ans[cnt++] = i;
26+
foreach (int j in g[i])
2827
{
29-
if (--indegree[a] == 0) q.Enqueue(a);
28+
if (--indeg[j] == 0) q.Enqueue(j);
3029
}
3130
}
32-
return n == numCourses ? ans : new int[0];
31+
return cnt == numCourses ? ans : new int[0];
3332
}
3433
}

‎lcof2/剑指 Offer II 113. 课程顺序/Solution.go‎

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
func findOrder(numCourses int, prerequisites [][]int) []int {
2-
edges := make([][]int, numCourses)
3-
indegree := make([]int, numCourses)
2+
g := make([][]int, numCourses)
3+
indeg := make([]int, numCourses)
44
for _, p := range prerequisites {
55
a, b := p[0], p[1]
6-
edges[b] = append(edges[b], a)
7-
indegree[a]++
6+
g[b] = append(g[b], a)
7+
indeg[a]++
88
}
9-
varq[]int
10-
for i:= 0; i<numCourses; i++ {
11-
if indegree[i] == 0 {
9+
q:=[]int{}
10+
for i, v:= rangeindeg {
11+
if v == 0 {
1212
q = append(q, i)
1313
}
1414
}
15-
varans []int
15+
ans :=[]int{}
1616
for len(q) > 0 {
17-
b := q[0]
17+
i := q[0]
1818
q = q[1:]
19-
ans = append(ans, b)
20-
for _, a := range edges[b] {
21-
indegree[a]--
22-
if indegree[a] == 0 {
23-
q = append(q, a)
19+
ans = append(ans, i)
20+
for _, j := range g[i] {
21+
indeg[j]--
22+
if indeg[j] == 0 {
23+
q = append(q, j)
2424
}
2525
}
2626
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /