我正在尝试解决以下面试问题
给定两个数组 firstDay 和 lastDay 代表可能会议的天数。计算最大会议次数,每天只有一次会议。
示例:
输入:
第一天 = [1, 1, 3]; 最后一天= [1, 3, 3]
输出:
3
说明:
数组区间[i] = [firstDay[i], lastDay[i]]
在区间 [0] = [1, 1] 内,本次会议只能在第 1 天召开,所以是第 1 天的会议;
在区间 [1] = [1, 3] 中,可以在第 1、2 或 3 天举行会议,但是第 1 天已经很忙,第 3 天会干扰区间 [2],只剩下第 2 天会议;
在区间 [2] = [3, 3] 内,本次会议只能在第 3 天召开,所以是第 3 天的会议;
解决方案:(贪心算法)
public static int countMeetings(List<Integer> firstDay, List<Integer> lastDay) {
List<Interval> intervals = IntStream.range(0, firstDay.size())
.mapToObj(i -> new Interval(firstDay.get(i), lastDay.get(i)))
.sorted(Comparator.comparing(Interval::getEnd))
.collect(Collectors.toList());
List<Integer> meetings = new ArrayList<>();
intervals.forEach(interval -> {
for (int i = interval.getStart(); i <= interval.getEnd(); i++) {
if (!meetings.contains(i)) {
meetings.add(i);
break;
}
}
});
return meetings.size();
}