本文主要是介绍[贪心策略] 会场安排问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法来进行安排。试编程实现对于给定的 k 个待安排活动,计算使用的最少会场。
输入数据中,第一行是 k 的值,接下来的 k 行中,每行有 2 个正整数,分别表示 k 个待安排活动的开始时间和结束时间,时间以 0 点开始的分钟计。
输出为最少的会场数。
输入样例
5
1 23
12 28
25 35
27 80
36 50
输出样例
3
分析
简单的贪心,先根据会议开始时间对所有会议进行升序排列,再遍历会议集合一个个的安排会场。
如果会议开始的时候没有空会场,就新开辟一个新会场。
如果会议开始的时候有空会场,就重复利用。
public static int arrange(int length, int[][] meetings) {Arrays.sort(meetings, Comparator.comparingInt(meeting -> meeting[0]));List<Integer> times = new ArrayList<>();// 记录会议结束时间outer:for (int i = 0; i < length; i++) {int start = meetings[i][0];int end = meetings[i][1];for (int j = 0; j < times.size(); j++) {if (start >= times.get(j)) {times.set(j, end);// 找到空会场,更换成新的结束时间continue outer;// 会议 meetings[i] 安排好了}}times.add(end);// 没有找到可用会场,需要新会场}return times.size();
}// 测试
public static void main(String[] args) {int length = 5;int[][] meetings = {{1, 23},{12, 28},{25, 35},{27, 80},{36, 50}};int count = arrange(length, meetings);System.out.println(count);
}
这篇关于[贪心策略] 会场安排问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!