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 7dd6ed7

Browse files
committed
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‎

Lines changed: 1 addition & 1 deletion
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‎

Lines changed: 1 addition & 1 deletion
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‎

Lines changed: 126 additions & 1 deletion
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‎

Lines changed: 124 additions & 1 deletion
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
### **...**
Lines changed: 28 additions & 0 deletions
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+
};
Lines changed: 34 additions & 0 deletions
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+
}

0 commit comments

Comments
(0)

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