Skip to content

Commit ccab7b0

Browse files
add 630
1 parent 32b1eb3 commit ccab7b0

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ Your ideas/fixes/algorithms are more than welcome!
3535
|634|[Find the Derangement of An Array](https://leetcode.com/problems/find-the-derangement-of-an-array/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_634.java) | O(n) |O(1) | Medium | Math
3636
|633|[Sum of Square Numbers](https://leetcode.com/problems/sum-of-square-numbers/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_633.java) | O(logn) |O(1) | Easy | Binary Search
3737
|632|[Smallest Range](https://leetcode.com/problems/smallest-range/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_632.java) | O(n*logk) |O(k) | Hard| Heap
38+
|630|[Course Schedule III](https://leetcode.com/problems/course-schedule-iii/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_630.java) | O(n*logn) |O(n) | Hard| Heap, Greedy
3839
|628|[Maximum Product of Three Numbers](https://leetcode.com/problems/maximum-product-of-three-numbers/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_628.java) | O(nlogn) |O(1) | Easy |
3940
|625|[Minimum Factorization](https://leetcode.com/problems/minimum-factorization/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_625.java) | O(?) |O(?) | Medium |
4041
|624|[Maximum Distance in Arrays](https://leetcode.com/problems/maximum-distance-in-arrays/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_624.java) | O(nlogn) |O(1) | Easy | Sort, Array
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.fishercoder.solutions;
2+
3+
import java.util.Arrays;
4+
import java.util.PriorityQueue;
5+
6+
/**
7+
* 630. Course Schedule III
8+
*
9+
* There are n different online courses numbered from 1 to n.
10+
* Each course has some duration(course length) t and closed on dth day.
11+
* 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.
12+
13+
Given n online courses represented by pairs (t,d), your task is to find the maximal number of courses that can be taken.
14+
15+
Example:
16+
Input: [[100, 200], [200, 1300], [1000, 1250], [2000, 3200]]
17+
Output: 3
18+
19+
Explanation:
20+
There're totally 4 courses, but you can take 3 courses at most:
21+
First, take the 1st course, it costs 100 days so you will finish it on the 100th day, and ready to take the next course on the 101st day.
22+
Second, take the 3rd course, it costs 1000 days so you will finish it on the 1100th day, and ready to take the next course on the 1101st day.
23+
Third, take the 2nd course, it costs 200 days so you will finish it on the 1300th day.
24+
The 4th course cannot be taken now, since you will finish it on the 3300th day, which exceeds the closed date.
25+
26+
Note:
27+
The integer 1 <= d, t, n <= 10,000.
28+
You can't take two courses simultaneously.
29+
*/
30+
public class _630 {
31+
/**Reference: https://discuss.leetcode.com/topic/93790/short-java-code-using-priorityqueue
32+
* Sort by finish date!!! This is greedy! We should take those classes that finish early first.*/
33+
public int scheduleCourse(int[][] courses) {
34+
Arrays.sort(courses, (a,b) -> a[1] - b[1]);
35+
int day = 0;
36+
PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a, b) -> b - a);
37+
for (int[] course : courses) {
38+
day += course[0];
39+
maxHeap.offer(course[0]);
40+
if (day > course[1]) {
41+
day -= maxHeap.poll();//drop the previous courses that took the most time
42+
}
43+
}
44+
return maxHeap.size();
45+
}
46+
47+
public static void main(String... args) {
48+
_630 test = new _630();
49+
int[][] courses = new int[][]{
50+
{100, 200},
51+
{200, 1300},
52+
{1000, 1250},
53+
{2000, 3200},
54+
{300, 1200}
55+
};
56+
test.scheduleCourse(courses);
57+
System.out.println("Finished..");
58+
}
59+
}

0 commit comments

Comments
 (0)