LeetCode: Meeting Rooms II

/**
Meeting Rooms II
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]],
return 2.
*/
import java.util.*;
class Interval {
     int start;
     int end;
     Interval() { start = 0; end = 0; }
     Interval(int s, int e) { start = s; end = e; }
}

public class MeetingRoomsII{

/**
-sort the intervals by ending time
-set minstart to first intervals start and maxend to first intervals end
-iterate through the sorted intervals
-if cur.end<=maxend, count++
-minstart = min(minstart, cur.start), maxend = max(maxend, cur.end)
*/
public static int minMeetingRooms1(Interval[] intervals) {
//base case
if(intervals==null || intervals.length<1){
return 0;
}

Arrays.sort(intervals, new Comparator<Interval>(){
public int compare(Interval i1, Interval i2){
return Integer.compare(i1.end, i2.end);
}
});
int minstart = intervals[0].start, maxend =  intervals[0].end;
int count = 1;
for(int i=1; i<intervals.length; i++){
if(intervals[i].start<=maxend){
count++;
}
maxend = Math.max(maxend, intervals[i].end);
minstart = Math.min(minstart, intervals[i].start);
}
return count;
}

public static int minMeetingRooms2(Interval[] intervals) {
//base case
if(intervals==null || intervals.length<1){
return 0;
}

Arrays.sort(intervals, new Comparator<Interval>(){
public int compare(Interval i1, Interval i2){
return Integer.compare(i1.start, i2.start);
}
});
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(intervals[0].end);
for(int i=1;i<intervals.length; i++){
if(intervals[i].start<=pq.peek()){
pq.poll();
}
pq.offer(intervals[i].end);
}
return pq.size();
}

public static void main(String[] args){
//[[0, 30],[5, 10],[15, 20]]
Interval[] ints = new Interval[3];
ints[0] = new Interval(1, 6);
ints[1] = new Interval(2, 3);
ints[2] = new Interval(4, 5);
//ints[3] = new Interval(9, 10);
System.out.println(minMeetingRooms1(ints));
System.out.println(minMeetingRooms2(ints));
}
}

No comments:

Post a Comment