贪心法描述:

贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。

在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。

问题描述:

现有一组活动由你安排,但要求你在最短的时间内安排尽可能多的活动。

代码如下:

Activity类用于封装活动对象,包括活动的开始时间和结束时间,另外实现了Comparable接口,用于按照结束时间非递减排序

public class Activity implements Comparable {

private String startTime;//活动开始时间

private String endTime;//活动结束时间

public Activity(String startTime,String endTime){

this.startTime=startTime;

this.endTime=endTime;

}

/**

* 按照活动结束时间非递减排序

*/

@Override

public int compareTo(Activity obj) {

String targetEndTime=obj.getEndTime();

int endHour=Integer.parseInt(endTime.split(":")[0]);

int endMin=Integer.parseInt(endTime.split(":")[1]);

int targetEndHour=Integer.parseInt(targetEndTime.split(":")[0]);

int targetEndMin=Integer.parseInt(targetEndTime.split(":")[1]);

int i=endMin>targetEndMin?1:(endMin

return endHour>targetEndHour?1:(endHour

}

public String getStartTime() {

return startTime;

}

public void setStartTime(String startTime) {

this.startTime = startTime;

}

public String getEndTime() {

return endTime;

}

public void setEndTime(String endTime) {

this.endTime = endTime;

}

@Override

public String toString() {

return startTime + "~" + endTime;

}

}ActivityPlan类为具体的执行类,通过其layout方法来安排活动

public class ActivityPlan {

List res=new ArrayList();

public List layout(Iterator activities){

if(!activities.hasNext()){

return res;

}

Activity activity=activities.next();

int size=res.size();

if(size==0){

res.add(activity);

}else{

Activity preActivity=res.get(size-1);

String preEndTime=preActivity.getEndTime();

String thisStartTime=activity.getStartTime();

if(legal(preEndTime,thisStartTime)){

res.add(activity);

}

}

return layout(activities);

}

/**

* 当前活动的开始时间是否在上一个活动的结束时间之后

*/

private boolean legal(String preEndTime, String thisStartTime) {

int preHour=Integer.parseInt(preEndTime.split(":")[0]);

int preMin=Integer.parseInt(preEndTime.split(":")[1]);

int thisHour=Integer.parseInt(thisStartTime.split(":")[0]);

int thisMin=Integer.parseInt(thisStartTime.split(":")[1]);

int i=preMin>thisMin?-1:(preMin

int j=preHour>thisHour?-1:(preHour

return j>=0;

}

}Main类用于代码测试

public class Main {

public static void main(String[] args) {

Set activitys=new TreeSet();

activitys.add(new Activity("9:30","10:30"));

activitys.add(new Activity("7:30","8:50"));

activitys.add(new Activity("10:40","11:30"));

activitys.add(new Activity("8:00","10:30"));

activitys.add(new Activity("8:30","11:40"));

activitys.add(new Activity("10:30","12:30"));

ActivityPlan plan=new ActivityPlan();

List res=plan.layout(activitys.iterator());

for(Activity activity:res){

System.out.print("\t"+activity);

}

}

}程序输出:7:30~8:50    9:30~10:30    10:40~11:30

java活动安排_贪心法求解活动安排(java实现)相关推荐

  1. 贪心法求解背包问题 C++

    1.问题描述 背包问题是给定n个重量为{w1, w2,- ,wn}.价值为{v1, v2, - ,vn}的物品和一个容量为C的背包,求这些物品中的一个最有价值的子集,并且要能够装到背包中每次从物品集合 ...

  2. 贪心法求解硬币问题和乘船问题

    贪心算法基本要素: 贪心选择性质:问题的最优解可以通过贪心选择实现(也就是先实现局部最优解,然后整体最优解可以通过一系列局部最优的选择来达到) 最优子结构性质:问题的最优解包含子问题的最优解 贪心算法 ...

  3. 贪心法求解汽车加油问题

    文章目录 问题内容 贪心法思想 问题分析 代码 结果展示 遇到的问题 问题内容 已知一辆汽车加满油后可行驶d(如d=7)km,而旅途中有若干个加油站.编写一个实验程序指出应在哪些加油站停靠加油,使加油 ...

  4. 贪心法求解磁盘驱动调度问题

    磁盘驱动调度问题 题目: 输入一个请求序列: 98,183,37,122,14,124,65,67 n=8 假设磁头一开始的位置start处于c(c不在序列中的任何位置),例如c=53 如果采用最短寻 ...

  5. 艺龙java面试题_艺龙2018秋招Java笔试题

    在牛客做了那么多题,终于轮到我分享了~~这是我做过的艺龙的Java笔试题哦~~ 单选题 1.设有以下递归函数: int f(int m,int n) { if(m==0) { return n+1; ...

  6. java自学难点_分享在达内教育培训Java的感受

    刚在达内教育培训完java,给即将来培训以及已经在培的学员分享下我的感受 回想一下在达内教育学习Java时的情景,我仍然兴奋不已,其实在刚接触Java时,自己确实有点晕,但经过一段时间学习,逐渐走出了 ...

  7. java俄罗斯方块视频_[VIP视频]【A0233】java面对对象编程-俄罗斯方块视频教程 高清视频 百度云 百度网...

    Java视频教程名称:java面对对象编程-俄罗斯方块视频教程  俄罗斯方块视频教程 $ X0 X1 Z: W4 P3 T  e. m3 q百度网盘下载链接: . M% x- I- V5 p( J 游 ...

  8. java读书心得_范文精选-读书心得体会-java夜未眠读书心得

    1 java 夜未眠读书心得 通过参加这次的 java 夜未眠读书培训,这个对于系统的扩展是很有用处的. new 已经决定了你肯定要这个类, 而静态方法却可以修改, 不一定肯定返回你方 法所在的类,可 ...

  9. java 底层运行_从表面到底层丨Java和JVM的运行原理,现在带给你

    Java,编程语言,被创造于90年代初,在经历了这么多年的风风雨雨,Java已经成长为世界第一的编程语言,根据往期以及目前的数据来看,Java的使用频率为全球第一,即使偶尔会有第二第三的情况,但是这依 ...

最新文章

  1. 时序数据采样、原始循环神经网络RNN、RNN梯度爆炸原因推导
  2. Font Rending 的 Hint 机制对排版的影响
  3. Python中包含义及其定义
  4. easyui树拖拽排序java_easyui tree 拖拽功能并将数据返回后台保存至数据库
  5. cmos摄像头如何识别颜色_绝对实用!开车上路怕违章 教你如何识别各种违章摄像头...
  6. ListView自定义视图中对Button按钮实现仅允许一个按钮处于开启状态
  7. python把数据写入excel_Python向excel中写入数据的方法
  8. eclipse源服务器未能找到,eclipse - HTTP状态[404]? [未找到](原始服务器未找到当前表示) - 堆栈内存溢出...
  9. 粉红噪音_粉红的常绿力量
  10. matlab如何实现降维,matlab怎么把矩阵降维
  11. [转载] python的变量和C++的变量有什么区别
  12. MySQL数据库优化之索引优化
  13. 如何更换tomcat版本
  14. PCL:三维点云概述(一)
  15. SQL数据库练习题以及答案(46例题)
  16. java 调用本地播放器_Java调用本地播放器播放视频文件
  17. Android 开发多摄像头 API
  18. 谷歌地图创建自定义位置_如何使用Google Home为任何命令创建自定义快捷方式
  19. 【已解决】superset创建admin用户失败:Error! User already exists user 或 AttributeError: ‘NoneType‘
  20. HarmonyOS与Android的全面对比

热门文章

  1. Windows中EFS加密及解密应用
  2. webBrowser强制在本窗口打开,禁止在新窗口打开
  3. .Net软件UI界面测试自动化--UIAutomation技术
  4. 采用ASP.NET IIS 注册工具 (Aspnet_regiis.exe)对web.config实行本地加密
  5. Oracle中NVARCHAR2与VARCHAR2的相互转换
  6. 如何从Windows远程上传文件到Linux(例如CentOS 7)
  7. 学习 WCF (3)--开发WCF客户程序
  8. explain查看mysql语句的执行效率
  9. MySQL的Found_ROWS函数介绍
  10. Vi经典插件ctags(转)