Skip to content

Commit 83b9b3b

Browse files
authoredSep 10, 2023
feat: add rust solution to lc problem:No.0210 (#1595)
No.0210.Course Schedule II
1 parent ef737e6 commit 83b9b3b

File tree

3 files changed

+124
-0
lines changed

3 files changed

+124
-0
lines changed
 

‎solution/0200-0299/0210.Course Schedule II/README.md

+43
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,49 @@ public class Solution {
269269
}
270270
```
271271

272+
### **Rust**
273+
274+
```rust
275+
impl Solution {
276+
pub fn find_order(num_courses: i32, prerequisites: Vec<Vec<i32>>) -> Vec<i32> {
277+
let n = num_courses as usize;
278+
let mut adjacency = vec![vec![]; n];
279+
let mut entry = vec![0; n];
280+
// init
281+
for iter in prerequisites.iter() {
282+
let (a, b) = (iter[0], iter[1]);
283+
adjacency[b as usize].push(a);
284+
entry[a as usize] += 1;
285+
}
286+
// construct deque & reslut
287+
let mut deque = std::collections::VecDeque::new();
288+
for index in 0..n {
289+
if entry[index] == 0 {
290+
deque.push_back(index);
291+
}
292+
}
293+
let mut result = vec![];
294+
// bfs
295+
while !deque.is_empty() {
296+
let head = deque.pop_front().unwrap();
297+
result.push(head as i32);
298+
// update degree of entry
299+
for &out_entry in adjacency[head].iter() {
300+
entry[out_entry as usize] -= 1;
301+
if entry[out_entry as usize] == 0 {
302+
deque.push_back(out_entry as usize);
303+
}
304+
}
305+
}
306+
if result.len() == n {
307+
result
308+
} else {
309+
vec![]
310+
}
311+
}
312+
}
313+
```
314+
272315
### **...**
273316

274317
```

‎solution/0200-0299/0210.Course Schedule II/README_EN.md

+43
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,49 @@ public class Solution {
248248
}
249249
```
250250

251+
### **Rust**
252+
253+
```rust
254+
impl Solution {
255+
pub fn find_order(num_courses: i32, prerequisites: Vec<Vec<i32>>) -> Vec<i32> {
256+
let n = num_courses as usize;
257+
let mut adjacency = vec![vec![]; n];
258+
let mut entry = vec![0; n];
259+
// init
260+
for iter in prerequisites.iter() {
261+
let (a, b) = (iter[0], iter[1]);
262+
adjacency[b as usize].push(a);
263+
entry[a as usize] += 1;
264+
}
265+
// construct deque & reslut
266+
let mut deque = std::collections::VecDeque::new();
267+
for index in 0..n {
268+
if entry[index] == 0 {
269+
deque.push_back(index);
270+
}
271+
}
272+
let mut result = vec![];
273+
// bfs
274+
while !deque.is_empty() {
275+
let head = deque.pop_front().unwrap();
276+
result.push(head as i32);
277+
// update degree of entry
278+
for &out_entry in adjacency[head].iter() {
279+
entry[out_entry as usize] -= 1;
280+
if entry[out_entry as usize] == 0 {
281+
deque.push_back(out_entry as usize);
282+
}
283+
}
284+
}
285+
if result.len() == n {
286+
result
287+
} else {
288+
vec![]
289+
}
290+
}
291+
}
292+
```
293+
251294
### **...**
252295

253296
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
impl Solution {
2+
pub fn find_order(num_courses: i32, prerequisites: Vec<Vec<i32>>) -> Vec<i32> {
3+
let n = num_courses as usize;
4+
let mut adjacency = vec![vec![]; n];
5+
let mut entry = vec![0; n];
6+
// init
7+
for iter in prerequisites.iter() {
8+
let (a, b) = (iter[0], iter[1]);
9+
adjacency[b as usize].push(a);
10+
entry[a as usize] += 1;
11+
}
12+
// construct deque & reslut
13+
let mut deque = std::collections::VecDeque::new();
14+
for index in 0..n {
15+
if entry[index] == 0 {
16+
deque.push_back(index);
17+
}
18+
}
19+
let mut result = vec![];
20+
// bfs
21+
while !deque.is_empty() {
22+
let head = deque.pop_front().unwrap();
23+
result.push(head as i32);
24+
// update degree of entry
25+
for &out_entry in adjacency[head].iter() {
26+
entry[out_entry as usize] -= 1;
27+
if entry[out_entry as usize] == 0 {
28+
deque.push_back(out_entry as usize);
29+
}
30+
}
31+
}
32+
if result.len() == n {
33+
result
34+
} else {
35+
vec![]
36+
}
37+
}
38+
}

0 commit comments

Comments
 (0)