Skip to content

Commit 7dd6ed7

Browse files
committedJul 23, 2022
feat: add solutions to lc problem: No.1136
No.1136.Parallel Courses
1 parent 840697a commit 7dd6ed7

File tree

8 files changed

+367
-4
lines changed

8 files changed

+367
-4
lines changed
 

‎lcof/面试题09. 用两个栈实现队列/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ impl CQueue {
288288
*/
289289
```
290290

291-
### **C##**
291+
### **C#**
292292

293293
```cs
294294
public class CQueue {

‎lcof2/剑指 Offer II 115. 重建序列/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767

6868
<p>&nbsp;</p>
6969

70-
<p>注意:本题与主站 444&nbsp;题相同:<a href="https://leetcode.cn/problems/sequence-reconstruction/">https://leetcode-cn.com/problems/sequence-reconstruction/</a></p>
70+
<p>注意:本题与主站 444&nbsp;题相同:<a href="https://leetcode.cn/problems/sequence-reconstruction/">https://leetcode.cn/problems/sequence-reconstruction/</a></p>
7171

7272
## 解法
7373

‎solution/1100-1199/1136.Parallel Courses/README.md

+126-1
Original file line numberDiff line numberDiff line change
@@ -55,22 +55,147 @@
5555

5656
<!-- 这里可写通用的实现逻辑 -->
5757

58+
**方法一:拓扑排序**
59+
5860
<!-- tabs:start -->
5961

6062
### **Python3**
6163

6264
<!-- 这里可写当前语言的特殊实现逻辑 -->
6365

6466
```python
65-
67+
class Solution:
68+
def minimumSemesters(self, n: int, relations: List[List[int]]) -> int:
69+
g = defaultdict(list)
70+
indeg = [0] * n
71+
for a, b in relations:
72+
g[a - 1].append(b - 1)
73+
indeg[b - 1] += 1
74+
ans = 0
75+
q = deque([i for i, v in enumerate(indeg) if v == 0])
76+
while q:
77+
ans += 1
78+
for _ in range(len(q)):
79+
i = q.popleft()
80+
n -= 1
81+
for j in g[i]:
82+
indeg[j] -= 1
83+
if indeg[j] == 0:
84+
q.append(j)
85+
return -1 if n else ans
6686
```
6787

6888
### **Java**
6989

7090
<!-- 这里可写当前语言的特殊实现逻辑 -->
7191

7292
```java
93+
class Solution {
94+
public int minimumSemesters(int n, int[][] relations) {
95+
List<Integer>[] g = new List[n];
96+
for (int i = 0; i < n; ++i) {
97+
g[i] = new ArrayList<>();
98+
}
99+
int[] indeg = new int[n];
100+
for (int[] r : relations) {
101+
int a = r[0] - 1, b = r[1] - 1;
102+
g[a].add(b);
103+
++indeg[b];
104+
}
105+
Deque<Integer> q = new ArrayDeque<>();
106+
for (int i = 0; i < n; ++i) {
107+
if (indeg[i] == 0) {
108+
q.offer(i);
109+
}
110+
}
111+
int ans = 0;
112+
while (!q.isEmpty()) {
113+
++ans;
114+
for (int k = q.size(); k > 0; --k) {
115+
int i = q.poll();
116+
--n;
117+
for (int j : g[i]) {
118+
if (--indeg[j] == 0) {
119+
q.offer(j);
120+
}
121+
}
122+
}
123+
}
124+
return n == 0 ? ans : -1;
125+
}
126+
}
127+
```
128+
129+
### **C++**
130+
131+
```cpp
132+
class Solution {
133+
public:
134+
int minimumSemesters(int n, vector<vector<int>>& relations) {
135+
vector<vector<int>> g(n);
136+
vector<int> indeg(n);
137+
for (auto& r : relations)
138+
{
139+
int a = r[0] - 1, b = r[1] - 1;
140+
g[a].push_back(b);
141+
++indeg[b];
142+
}
143+
queue<int> q;
144+
for (int i = 0; i < n; ++i) if (indeg[i] == 0) q.push(i);
145+
int ans = 0;
146+
while (!q.empty())
147+
{
148+
++ans;
149+
for (int k = q.size(); k; --k)
150+
{
151+
int i = q.front();
152+
q.pop();
153+
--n;
154+
for (int j : g[i]) if (--indeg[j] == 0) q.push(j);
155+
}
156+
}
157+
return n == 0 ? ans : -1;
158+
}
159+
};
160+
```
73161
162+
### **Go**
163+
164+
```go
165+
func minimumSemesters(n int, relations [][]int) int {
166+
g := make([][]int, n)
167+
indeg := make([]int, n)
168+
for _, r := range relations {
169+
a, b := r[0]-1, r[1]-1
170+
g[a] = append(g[a], b)
171+
indeg[b]++
172+
}
173+
q := []int{}
174+
for i, v := range indeg {
175+
if v == 0 {
176+
q = append(q, i)
177+
}
178+
}
179+
ans := 0
180+
for len(q) > 0 {
181+
ans++
182+
for k := len(q); k > 0; k-- {
183+
i := q[0]
184+
q = q[1:]
185+
n--
186+
for _, j := range g[i] {
187+
indeg[j]--
188+
if indeg[j] == 0 {
189+
q = append(q, j)
190+
}
191+
}
192+
}
193+
}
194+
if n == 0 {
195+
return ans
196+
}
197+
return -1
198+
}
74199
```
75200

76201
### **...**

‎solution/1100-1199/1136.Parallel Courses/README_EN.md

+124-1
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,136 @@ In the second semester, you can take course 3.
4848
### **Python3**
4949

5050
```python
51-
51+
class Solution:
52+
def minimumSemesters(self, n: int, relations: List[List[int]]) -> int:
53+
g = defaultdict(list)
54+
indeg = [0] * n
55+
for a, b in relations:
56+
g[a - 1].append(b - 1)
57+
indeg[b - 1] += 1
58+
ans = 0
59+
q = deque([i for i, v in enumerate(indeg) if v == 0])
60+
while q:
61+
ans += 1
62+
for _ in range(len(q)):
63+
i = q.popleft()
64+
n -= 1
65+
for j in g[i]:
66+
indeg[j] -= 1
67+
if indeg[j] == 0:
68+
q.append(j)
69+
return -1 if n else ans
5270
```
5371

5472
### **Java**
5573

5674
```java
75+
class Solution {
76+
public int minimumSemesters(int n, int[][] relations) {
77+
List<Integer>[] g = new List[n];
78+
for (int i = 0; i < n; ++i) {
79+
g[i] = new ArrayList<>();
80+
}
81+
int[] indeg = new int[n];
82+
for (int[] r : relations) {
83+
int a = r[0] - 1, b = r[1] - 1;
84+
g[a].add(b);
85+
++indeg[b];
86+
}
87+
Deque<Integer> q = new ArrayDeque<>();
88+
for (int i = 0; i < n; ++i) {
89+
if (indeg[i] == 0) {
90+
q.offer(i);
91+
}
92+
}
93+
int ans = 0;
94+
while (!q.isEmpty()) {
95+
++ans;
96+
for (int k = q.size(); k > 0; --k) {
97+
int i = q.poll();
98+
--n;
99+
for (int j : g[i]) {
100+
if (--indeg[j] == 0) {
101+
q.offer(j);
102+
}
103+
}
104+
}
105+
}
106+
return n == 0 ? ans : -1;
107+
}
108+
}
109+
```
110+
111+
### **C++**
112+
113+
```cpp
114+
class Solution {
115+
public:
116+
int minimumSemesters(int n, vector<vector<int>>& relations) {
117+
vector<vector<int>> g(n);
118+
vector<int> indeg(n);
119+
for (auto& r : relations)
120+
{
121+
int a = r[0] - 1, b = r[1] - 1;
122+
g[a].push_back(b);
123+
++indeg[b];
124+
}
125+
queue<int> q;
126+
for (int i = 0; i < n; ++i) if (indeg[i] == 0) q.push(i);
127+
int ans = 0;
128+
while (!q.empty())
129+
{
130+
++ans;
131+
for (int k = q.size(); k; --k)
132+
{
133+
int i = q.front();
134+
q.pop();
135+
--n;
136+
for (int j : g[i]) if (--indeg[j] == 0) q.push(j);
137+
}
138+
}
139+
return n == 0 ? ans : -1;
140+
}
141+
};
142+
```
57143
144+
### **Go**
145+
146+
```go
147+
func minimumSemesters(n int, relations [][]int) int {
148+
g := make([][]int, n)
149+
indeg := make([]int, n)
150+
for _, r := range relations {
151+
a, b := r[0]-1, r[1]-1
152+
g[a] = append(g[a], b)
153+
indeg[b]++
154+
}
155+
q := []int{}
156+
for i, v := range indeg {
157+
if v == 0 {
158+
q = append(q, i)
159+
}
160+
}
161+
ans := 0
162+
for len(q) > 0 {
163+
ans++
164+
for k := len(q); k > 0; k-- {
165+
i := q[0]
166+
q = q[1:]
167+
n--
168+
for _, j := range g[i] {
169+
indeg[j]--
170+
if indeg[j] == 0 {
171+
q = append(q, j)
172+
}
173+
}
174+
}
175+
}
176+
if n == 0 {
177+
return ans
178+
}
179+
return -1
180+
}
58181
```
59182

60183
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
class Solution {
2+
public:
3+
int minimumSemesters(int n, vector<vector<int>>& relations) {
4+
vector<vector<int>> g(n);
5+
vector<int> indeg(n);
6+
for (auto& r : relations)
7+
{
8+
int a = r[0] - 1, b = r[1] - 1;
9+
g[a].push_back(b);
10+
++indeg[b];
11+
}
12+
queue<int> q;
13+
for (int i = 0; i < n; ++i) if (indeg[i] == 0) q.push(i);
14+
int ans = 0;
15+
while (!q.empty())
16+
{
17+
++ans;
18+
for (int k = q.size(); k; --k)
19+
{
20+
int i = q.front();
21+
q.pop();
22+
--n;
23+
for (int j : g[i]) if (--indeg[j] == 0) q.push(j);
24+
}
25+
}
26+
return n == 0 ? ans : -1;
27+
}
28+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
func minimumSemesters(n int, relations [][]int) int {
2+
g := make([][]int, n)
3+
indeg := make([]int, n)
4+
for _, r := range relations {
5+
a, b := r[0]-1, r[1]-1
6+
g[a] = append(g[a], b)
7+
indeg[b]++
8+
}
9+
q := []int{}
10+
for i, v := range indeg {
11+
if v == 0 {
12+
q = append(q, i)
13+
}
14+
}
15+
ans := 0
16+
for len(q) > 0 {
17+
ans++
18+
for k := len(q); k > 0; k-- {
19+
i := q[0]
20+
q = q[1:]
21+
n--
22+
for _, j := range g[i] {
23+
indeg[j]--
24+
if indeg[j] == 0 {
25+
q = append(q, j)
26+
}
27+
}
28+
}
29+
}
30+
if n == 0 {
31+
return ans
32+
}
33+
return -1
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class Solution {
2+
public int minimumSemesters(int n, int[][] relations) {
3+
List<Integer>[] g = new List[n];
4+
for (int i = 0; i < n; ++i) {
5+
g[i] = new ArrayList<>();
6+
}
7+
int[] indeg = new int[n];
8+
for (int[] r : relations) {
9+
int a = r[0] - 1, b = r[1] - 1;
10+
g[a].add(b);
11+
++indeg[b];
12+
}
13+
Deque<Integer> q = new ArrayDeque<>();
14+
for (int i = 0; i < n; ++i) {
15+
if (indeg[i] == 0) {
16+
q.offer(i);
17+
}
18+
}
19+
int ans = 0;
20+
while (!q.isEmpty()) {
21+
++ans;
22+
for (int k = q.size(); k > 0; --k) {
23+
int i = q.poll();
24+
--n;
25+
for (int j : g[i]) {
26+
if (--indeg[j] == 0) {
27+
q.offer(j);
28+
}
29+
}
30+
}
31+
}
32+
return n == 0 ? ans : -1;
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution:
2+
def minimumSemesters(self, n: int, relations: List[List[int]]) -> int:
3+
g = defaultdict(list)
4+
indeg = [0] * n
5+
for a, b in relations:
6+
g[a - 1].append(b - 1)
7+
indeg[b - 1] += 1
8+
ans = 0
9+
q = deque([i for i, v in enumerate(indeg) if v == 0])
10+
while q:
11+
ans += 1
12+
for _ in range(len(q)):
13+
i = q.popleft()
14+
n -= 1
15+
for j in g[i]:
16+
indeg[j] -= 1
17+
if indeg[j] == 0:
18+
q.append(j)
19+
return -1 if n else ans

0 commit comments

Comments
 (0)
Please sign in to comment.