Given an array of meeting time intervals consisting of start and end times[[s1,e1],[s2,e2],...]
(si< ei), find the minimum number of conference rooms required.
For example,
Given[[0, 30],[5, 10],[15, 20]]
,
return2
.
tag: interval
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
class Solution {
private class Point{
int val;
boolean isStart;
public Point(int val, boolean isStart){
this.val = val;
this.isStart = isStart;
}
}
public int minMeetingRooms(Interval[] intervals) {
if (intervals == null || intervals.length == 0) return 0;
if (intervals.length == 1) return 1;
List<Point> points = new ArrayList<>();
for (Interval itv : intervals){
points.add(new Point(itv.start, true));
points.add(new Point(itv.end, false));
}
Collections.sort(points, new Comparator<Point>(){
public int compare(Point a, Point b){
if (a.val == b.val){
return a.isStart ? 1 : -1;
}
else{
return a.val - b.val;
}
}
});
int count = 0, ans = 0;
for (Point p : points){
if (p.isStart){
count++;
}
else{
count--;
}
ans = Math.max(ans, count);
}
return ans;
}
}