1. 会议室问题
package com.zrj.algorithm.test;
import cn.hutool.core.date.DateUtil;
import java.util.Arrays;
import java.util.Date;
public class MinMeetingRooms {
public static void main(String[] args) {
int[][] meetings = {{0, 30}, {5, 10}, {15, 20}, {15, 35}};
System.out.println("最小会议室: " + minMeetingRooms(meetings));
Date statTime1 = DateUtil.parse("2021-07-05 01:10:00");
Date endTime1 = DateUtil.parse("2021-07-05 01:10:30");
Date statTime2 = DateUtil.parse("2021-07-05 01:10:05");
Date endTime2 = DateUtil.parse("2021-07-05 01:10:10");
Date statTime3 = DateUtil.parse("2021-07-05 01:10:15");
Date endTime3 = DateUtil.parse("2021-07-05 01:10:20");
Date[][] timePeriod = {{statTime2, endTime2}, {statTime1, endTime1}, {statTime3, endTime3}};
System.out.println("重叠时间区间数:" + OverlappingTimePeriod(timePeriod));
}
public static int minMeetingRooms(int[][] meetings) {
int n = meetings.length;
int[] begin = new int[n];
int[] end = new int[n];
for (int i = 0; i < n; i++) {
begin[i] = meetings[i][0];
end[i] = meetings[i][1];
}
Arrays.sort(begin);
Arrays.sort(end);
int count = 0;
int res = 0;
int i = 0, j = 0;
while (i < n && j < n) {
if (begin[i] < end[j]) {
count++;
i++;
} else {
count--;
j++;
}
res = Math.max(res, count);
}
return res;
}
public static int OverlappingTimePeriod(Date[][] timePeriod) {
int n = timePeriod.length;
Date[] begin = new Date[n];
Date[] end = new Date[n];
for (int i = 0; i < n; i++) {
begin[i] = timePeriod[i][0];
end[i] = timePeriod[i][1];
}
Arrays.sort(begin);
Arrays.sort(end);
int count = 0;
int res = 0, i = 0, j = 0;
while (i < n && j < n) {
if (DateUtil.compare(begin[i], end[j]) < 0) {
count++;
i++;
} else {
count--;
j++;
}
res = Math.max(res, count);
}
return res;
}
}
2. 计算重叠时间区间段
同上