mirror of
https://github.com/devenperez/leetcode.git
synced 2026-06-13 03:27:07 +00:00
Time: 814 ms (5.02%), Space: 57 MB (17.32%) - LeetHub
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
class Solution:
|
||||
def minimumTime(self, n: int, relations: List[List[int]], time: List[int]) -> int:
|
||||
"""
|
||||
Complexities:
|
||||
Time: O(n^2)
|
||||
Space: O(r)
|
||||
|
||||
where n = n, r = len(relations)
|
||||
"""
|
||||
|
||||
# courses been taken array
|
||||
# - O(r) time / O(r) space
|
||||
hasPrereq = [False] * n
|
||||
prereqMap = [set() for i in range(n)]
|
||||
leadsToMap = [set() for i in range(n)]
|
||||
for prevCourse, nextCourse in relations:
|
||||
hasPrereq[nextCourse - 1] = True
|
||||
prereqMap[nextCourse - 1].add(prevCourse)
|
||||
leadsToMap[prevCourse - 1].add(nextCourse)
|
||||
|
||||
# O(n) space
|
||||
timeUntilComplete = [-1] * n
|
||||
coursesCalculated = 0
|
||||
maxOverallTimeFound = 0
|
||||
toResolve = set()
|
||||
|
||||
# calculate timeUntilComplete for no prereq courses
|
||||
# - O(n) time
|
||||
for i in range(n):
|
||||
if not hasPrereq[i]:
|
||||
timeUntilComplete[i] = time[i]
|
||||
maxOverallTimeFound = max(maxOverallTimeFound, time[i])
|
||||
coursesCalculated += 1
|
||||
toResolve.update(leadsToMap[i])
|
||||
|
||||
# find all timeUntilComplete
|
||||
# - if all prereq times are known, then calc
|
||||
# - O(n^2) time
|
||||
while len(toResolve) > 0:
|
||||
nextCourse = toResolve.pop()
|
||||
maxPrereqTime = -1
|
||||
for prereq in prereqMap[nextCourse - 1]:
|
||||
if timeUntilComplete[prereq - 1] == -1:
|
||||
maxPrereqTime = -1
|
||||
break
|
||||
maxPrereqTime = max(maxPrereqTime, timeUntilComplete[prereq - 1])
|
||||
|
||||
if maxPrereqTime > -1:
|
||||
timeUntilComplete[nextCourse - 1] = maxPrereqTime + time[nextCourse - 1]
|
||||
maxOverallTimeFound = max(maxOverallTimeFound, timeUntilComplete[nextCourse - 1])
|
||||
coursesCalculated += 1
|
||||
toResolve.update(leadsToMap[nextCourse - 1])
|
||||
|
||||
|
||||
|
||||
return maxOverallTimeFound
|
||||
Reference in New Issue
Block a user