一、题目描述
二、解题
排序
这题有点类似于452题-用最少数量的箭引爆气球
将数组按照左边界升序,然后通过比较,左右两个边界,判断是否需要新的会议室,如果相邻的两个数组不重合,说明开完上一个会,会议室空闲,继续给下一个会议使用,共用一个会议室,如果重叠则需要两个会议室。
public class leetcode253 {
public static void main(String[] args) {
leetcode253 leetcode = new leetcode253();
int[][] intervals = new int[][]{
// {0,30},{5,10},{15,20}
{7,10},{2,4}
};
int res = leetcode.minMeetingRooms(intervals);
System.out.println(res);
}
public int minMeetingRooms(int[][] intervals) {
if(intervals == null){
return 0;
}
//使用排序
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
//左边界升序
return o1[0] - o2[0];
}
});
int cnt = 1;
int right = intervals[0][1];
int length = intervals.length;
//从第二个数开始遍历
for(int i = 1;i<length;i++){
//如果第二个数的左边界大于前面的左边界,说明可以使用一间会议室
if(intervals[i][0] > right){
continue;
}else{
cnt++;
//更新右边界的值
right = intervals[i][1];
}
}
return cnt;
}
}