Skip to content

Commit e9253b8

Browse files
authored
Graph (#373)
* Refactor code style for course schedule I & II * Delete redundant solutions * Refactor code style
1 parent bcbd9ce commit e9253b8

4 files changed

+25
-165
lines changed

DFS/CourseSchedule.swift

-66
This file was deleted.

DFS/CourseScheduleII.swift

-64
This file was deleted.

Graph/CourseSchedule.swift

+5-9
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,21 @@
1515
toCourses[courses[1], default:[]].append(courses[0])
1616
}
1717

18-
var queue = (0..<numCourses).filter { inDegrees[$0] == 0 }, validCourseCount = 0
18+
var queue = (0..<numCourses).filter { inDegrees[$0] == 0 }, validCoursesCount = 0
1919

2020
while !queue.isEmpty {
2121
let course = queue.removeFirst()
2222

23-
validCourseCount += 1
23+
validCoursesCount += 1
2424

25-
guard let toCourses = toCourses[course] else {
26-
continue
27-
}
28-
29-
for toCourse in toCourses {
25+
for toCourse in toCourses[course] ?? [] {
3026
inDegrees[toCourse] -= 1
3127
if inDegrees[toCourse] == 0 {
3228
queue.append(toCourse)
3329
}
3430
}
3531
}
3632

37-
return validCourseCount == numCourses
33+
return validCoursesCount == numCourses
3834
}
39-
}
35+
}

Graph/CourseScheduleII.swift

+20-26
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,30 @@
66
*
77
*/
88

9-
class CourseScheduleII {
9+
class CourseScheduleII {
1010
func findOrder(_ numCourses: Int, _ prerequisites: [[Int]]) -> [Int] {
11-
var inDegrees = Array(repeating: 0, count: numCourses), fromTo = [Int: [Int]]()
12-
var coursesCouldTake = [Int]()
13-
14-
// init graph
15-
for prerequisite in prerequisites {
16-
fromTo[prerequisite[1], default: []].append(prerequisite[0])
17-
inDegrees[prerequisite[0]] += 1
11+
var indegrees = Array(repeating: 0, count: numCourses), toCourses = [Int: [Int]]()
12+
13+
for pres in prerequisites {
14+
indegrees[pres[0]] += 1
15+
toCourses[pres[1], default: []].append(pres[0])
1816
}
19-
20-
var queue = (0..<numCourses).filter { inDegrees[$0] == 0 }
21-
17+
18+
var queue = (0..<numCourses).filter { indegrees[$0] == 0 }, result = [Int]()
19+
2220
while !queue.isEmpty {
23-
let currentCourse = queue.removeFirst()
24-
coursesCouldTake.append(currentCourse)
25-
26-
guard let toCourses = fromTo[currentCourse] else {
27-
continue
28-
}
29-
30-
toCourses.forEach {
31-
inDegrees[$0] -= 1
32-
33-
if inDegrees[$0] == 0 {
34-
queue.append($0)
21+
let course = queue.removeFirst()
22+
23+
result.append(course)
24+
25+
for toCourse in toCourses[course] ?? [] {
26+
indegrees[toCourse] -= 1
27+
if indegrees[toCourse] == 0 {
28+
queue.append(toCourse)
3529
}
3630
}
3731
}
38-
39-
return coursesCouldTake.count == numCourses ? coursesCouldTake : [Int]()
32+
33+
return result.count == numCourses ? result : [Int]()
4034
}
41-
}
35+
}

0 commit comments

Comments
 (0)