630 Course Schedule III
Last updated
Last updated
There are n
different online courses numbered from 1
to n
. Each course has some duration(course length) t
and closed on dth
day. A course should be taken continuously for t
days and must be finished before or on the dth
day. You will start at the 1st day.
Given n
online courses represented by pairs (t,d)
, your task is to find the maximal number of courses that can be taken.
Example:
Note:
The integer 1 <= d, t, n <= 10,000.
You can't take two courses simultaneously.
The Idea: The general idea is to fit the largest number of courses you can take such that it fits the smallest deadline. I have used a recursive approach, but it quickly fails to stack overflow (albiet if python optimized tail end recursion, it would not). First sort by the courses by deadline. Next, iterate through the courses, by deadline one by one and to find the first available largest course that fits in with the current deadline. We can do this by just again, iterating through the courses in the reverse order of the deadlines. All at the same time, we keep track of the current day we are in. If this course is found, then we can remove said course, update our current day, and do this process again. This next process would again, find the longest course that is before the smallest deadline.