本人菜鸟一枚,刚开始做这个题也没有思路,参考了别人的思路,最终完成了这道题。

我将关于本问题的思路都写在代码中了,欢迎大家指出问题。

package com.zhou.algorithm;import java.util.Comparator;
import java.util.LinkedList;
import java.util.Scanner;/*** 会议安排问题:在足够多的会场里安排一批活动,并希望使用尽可能少的会场。* 会议安排问题解决思路:* (1):如果要在同一个会场安排多个活动,但是它们之间有的是不相容的,现要求安排活动使得当下能够举办最多的活动。* 方法:先按照活动结束的时间进行排序,谁先结束谁在前;若是活动结束时间相同,再按照活动开始时间排序,谁先开始谁在前。*这样才能达到举办最多活动的贪心。* (2):如果要在多个会场安排多个活动,会场足够多,要求活动全部举办完成,并且使用最少的会场。* 方法:先按照活动开始时间进行排序,谁先开始谁在前;若是活动开始时间相同,再按照活动结束时间排序,谁先结束谁在前。* 这样就可以保证每一个会场的使用时间最大化,那么相应的,使用的会场个数也就减少了。*** 本题思路:按照开始时间从小到大进行排序,然后按照开始时间最早的活动的结束时间为第一个会场的结束时间,* 如果有开始时间大于这个会场结束时间的活动(说明这两个活动可以公用这个会场),则更新会场的结束时间* 为该活动的结束时间,后面的活动进行类似的比较,安排过的活动进行排除,最后得到所需要的最少会场数。* 输入:* 5          (活动的数目)* 1 23       (活动的开始时间,结束时间)* 12 28* 25 35* 27 80* 36 50* 输出:* 3          (所需要的最少会场数)*/
public class MeetingArrange {/***该函数用于计算出安排这些活动至少需要几个会场* @param start 开始时间数组* @param end   结束时间数组* @param n     活动的个数* @return      安排这些活动所需要的最少会场个数*/public static int meetingArrangement(int[] start , int[] end ,int n){int nums = 0;int temp = 0;//用一个队列存储每一个活动的开始时间和结束时间LinkedList<Activity> activities = new LinkedList<Activity>();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 <activities.size() ; i++) {//即这个活动的开始时间大于这个会场的结束时间,可以共用一个会场if (activities.get(i).getStart()>temp){//更新这个会场的结束时间temp = activities.get(i).getEnd();//相当于是将该活动安排到该会场举行,移除该活动activities.remove(i);//这里i--是因为移除一个元素之后,队列中元素的下标发生了变化,4会变为3,所以为了遍历所有的活动,这里下标需要减1i--;}}}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;}@Overridepublic String toString() {return "Activity{" +"start=" + start +", end=" + end +'}';}
}

会议安排问题JAVA实现相关推荐

  1. 【算法分析】实验 1. 基于贪心的会议安排问题

    目录 实验内容 实验目的 环境要求 实验结果 步骤一 步骤二 步骤三 步骤四 步骤五 步骤六 实验总结 附录:测试数据 实验内容 本实验要求基于算法设计与分析的一般过程(即待求解问题的描述.算法设计. ...

  2. ECNUOJ 2615 会议安排

    会议安排 Time Limit:1000MS Memory Limit:65536KB Total Submit:451 Accepted:102 Description 科研人员与相关领域的国内外同 ...

  3. 贪心算法之高级钟点秘书会议安排问题

    1.问题 所谓"钟点秘书",是指年轻白领女性利用工余时间为客户提供秘书服务,并按钟点收取酬金."钟点秘书"为客户提供有偿服务的方式一般是:采用电话.电传.上网等 ...

  4. Skype for Business 2015新功能之Web会议安排

    Skype for Business 2015新推出了Web会议安排,方便没有安装Outlook的客户进行预约会议安排.

  5. [sicily]【1001】 会议安排(田忌赛马类贪心)

    题干: N个会议要同时举行,参会人数分别为A[0], A[1], ...,A[N-1]. 现有M个会议室,会议室可容纳人数分别为B[0], B[1], ...,B[M-1]. 当A[i]<=B[ ...

  6. c语言会议安排编程,我院召开《C语言程序设计》课程教学研讨会

    2018年12月25日,<C语言程序设计>课程主讲教师曾碧卿.教学伙伴苏海在学院408会议室召开了<C语言程序设计>课程教学研讨会.会议邀请了华南师范大学软件学院党总支副书记王 ...

  7. 监考安排系统java代码_基于jsp的监考安排与查询-JavaEE实现监考安排与查询 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的监考安排与查询, 该项目可用各类java课程设计大作业中, 监考安排与查询的系统架构分为前后台两部分, 最终实现在 ...

  8. 贪心算法之 活动安排(Java代码实现)

    活动安排问题 – 资源争夺 问题描述 设有 n 个活动的集合 A = {1, 2, - , n}, 其中每个活动都要求使用同一资源,而在同一时间段内只有一个活动能使用资源 要求高效安排一系列争用公共资 ...

  9. 华为鸿蒙会议安排,2020华为HDC日程确定,鸿蒙、HMS以及EMUI 11成最关注点

    原标题:2020华为HDC日程确定,鸿蒙.HMS以及EMUI 11成最关注点 HDC:华为开发者大会,目前已经确定将在9月10日正式开幕.日前华为已经在其官网公布了HDC的日程,从现在的消息看华为开发 ...

最新文章

  1. HYSBZ - 1798 Seq 维护序列seq 线段树lazy标记
  2. 为什么像王者荣耀这样的游戏 Server 不愿意使用微服务?
  3. 归并排序--数组和链表的实现
  4. Java:多线程之线程池
  5. C# 无意间写了一段线程死锁的代码
  6. python requests https_解决python的requests模块访问私有SSL证书产生的报错问题
  7. php unserialize 返回false的解决方法
  8. 终端模拟器大 PK,你 Pick 谁?
  9. 编写组件,使用JavaScript更新UpdatePanel
  10. python123用户登录的三次机会_用户登录三次机会(PYTHON)
  11. 2019-2020-1 20175313 《信息安全系统设计基础》第二周学习总结
  12. 手把手教你用jmeter做压力测试(详图)
  13. 基于小程序的定位健康打卡系统
  14. 游戏音效的发展和制作游戏音效的意义
  15. 维基百科中文语料库训练word2vec模型和使用总结
  16. 在ipad上播放flash大集合
  17. 王者荣耀刷金币小程序
  18. Linux使用grep查找文件内容
  19. 杜邦分析法拆解三种商业模式
  20. vscode 解决端口被占用问题

热门文章

  1. 对标赛灵思,国产FPGA上演“飙车记”
  2. 【报告】当“无线通信”遇到“图神经网络”——简单理解
  3. MindMaster-----培训计划
  4. 删除bing搜索中网站页面的方法
  5. MT4行情交易API接口开发手记
  6. Fine-grained Detection —— LIO
  7. 实现代理IP的自动获取
  8. 12月1日(第三天)
  9. 矩阵、变换和空间的关系
  10. 童年小游戏三子棋(C语言数组实现)