-
-
Notifications
You must be signed in to change notification settings - Fork 164
/
Copy pathmeetingRooms2.java
70 lines (62 loc) · 2.24 KB
/
meetingRooms2.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package java1.algorithms.interval;
import java.util.*;
class Interval {
int start, end;
Interval(int start, int end) {
this.start = start;
this.end = end;
}
}
public class meetingRooms2 {
//Two pointer TC: O(n logn + n) SC: O(n)
private static int minMeetingRooms1(List<Interval> intervals) {
int length = intervals.size();
int[] startTimes = new int[length];
int[] endTimes = new int[length];
int minMeetingRooms = 0, count = 0;
for(int i=0; i<intervals.size(); i++) {
startTimes[i] = intervals.get(i).start;
endTimes[i] = intervals.get(i).end;
}
Arrays.sort(startTimes);
Arrays.sort(endTimes);
int startIndex =0, endIndex = 0;
while(startIndex < intervals.size()) {
if(startTimes[startIndex] < endTimes[endIndex]) {
count++;
startIndex++;
} else {
count--;
endIndex++;
}
minMeetingRooms = Math.max(minMeetingRooms, count);
}
return minMeetingRooms;
}
//Priority Queue + sorting:- TC: O(n logn + n) SC: O(n)
private static int minMeetingRooms2(List<Interval> intervals) {
Collections.sort(intervals, (a, b) -> a.start - b.start);
PriorityQueue<Interval> priorityQueue = new PriorityQueue<>((a, b) -> a.end-b.end);
priorityQueue.add(intervals.get(0));
for(int i=1; i< intervals.size(); i++) {
int endTime = priorityQueue.peek().end;
int startTime = intervals.get(i).start;
if(endTime <= startTime) {
priorityQueue.poll();
}
priorityQueue.add(intervals.get(i));
}
return priorityQueue.size();
}
public static void main(String[] args) {
List<Interval> intervals = new ArrayList<>();
intervals.add(new Interval(2, 7));
intervals.add(new Interval(3, 5));
intervals.add(new Interval(3, 9));
intervals.add(new Interval(5, 12));
intervals.add(new Interval(8, 15));
intervals.add(new Interval(9, 14));
System.out.println(minMeetingRooms1(intervals));
System.out.println(minMeetingRooms2(intervals));
}
}