本人菜鸟一枚,刚开始做这个题也没有思路,参考了别人的思路,最终完成了这道题。
我将关于本问题的思路都写在代码中了,欢迎大家指出问题。
package com.zhou.algorithm;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.Scanner;
public class MeetingArrange {
public static int meetingArrangement(int[] start , int[] end ,int n){
int nums = 0;
int temp = 0;
//用一个队列存储每一个活动的开始时间和结束时间
LinkedList activities = new LinkedList();
for (int i = 0; i < n; i++) {
activities.add(new Activity(start[i],end[i]));
}
//对所有的活动以开始时间进行排序
activities.sort(Comparator.comparing(Activity::getStart));
for (Activity activity : activities) {
System.out.println(activity);
}
while (!activities.isEmpty()){
//开始时间为第一个的活动一定要占用一个会场,以这个活动的结束时间作为该会场的结束时间
temp = activities.getFirst().getEnd();
System.out.println("temp------>"+temp);
activities.removeFirst();
nums++;
//对每一个活动进行遍历,寻找能够和这个活动共用一个会场的活动
for (int i = 0; i temp){
//更新这个会场的结束时间
temp = activities.get(i).getEnd();
//相当于是将该活动安排到该会场举行,移除该活动
activities.remove(i);
//这里i--是因为移除一个元素之后,队列中元素的下标发生了变化,4会变为3,所以为了遍历所有的活动,这里下标需要减1
i--;
}
}
}
return nums;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入所要安排活动的个数:");
int n = scanner.nextInt();
//活动开始时间和结束时间数组,下表为0的元素不使用
int[] start = new int[n];
int[] end = new int[n];
//输入所有活动的开始时间和结束时间
for (int i = 0; i < n; i++) {
start[i] = scanner.nextInt();
end[i] = scanner.nextInt();
}
int num = meetingArrangement(start,end,n);
System.out.println("举行这几个活动那个,最少需要的会场为"+num+"个");
}
}
//创建一个活动类,包含活动的开始时间和结束时间
class Activity{
private int start;
private int end;
public Activity(int start, int end) {
this.start = start;
this.end = end;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
@Override
public String toString() {
return "Activity{" +
"start=" + start +
", end=" + end +
'}';
}
}



