java活动安排_贪心法求解活动安排(java实现)
贪心法描述:
贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。
在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。
问题描述:
现有一组活动由你安排,但要求你在最短的时间内安排尽可能多的活动。
代码如下:
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实现)相关推荐
- 贪心法求解背包问题 C++
1.问题描述 背包问题是给定n个重量为{w1, w2,- ,wn}.价值为{v1, v2, - ,vn}的物品和一个容量为C的背包,求这些物品中的一个最有价值的子集,并且要能够装到背包中每次从物品集合 ...
- 贪心法求解硬币问题和乘船问题
贪心算法基本要素: 贪心选择性质:问题的最优解可以通过贪心选择实现(也就是先实现局部最优解,然后整体最优解可以通过一系列局部最优的选择来达到) 最优子结构性质:问题的最优解包含子问题的最优解 贪心算法 ...
- 贪心法求解汽车加油问题
文章目录 问题内容 贪心法思想 问题分析 代码 结果展示 遇到的问题 问题内容 已知一辆汽车加满油后可行驶d(如d=7)km,而旅途中有若干个加油站.编写一个实验程序指出应在哪些加油站停靠加油,使加油 ...
- 贪心法求解磁盘驱动调度问题
磁盘驱动调度问题 题目: 输入一个请求序列: 98,183,37,122,14,124,65,67 n=8 假设磁头一开始的位置start处于c(c不在序列中的任何位置),例如c=53 如果采用最短寻 ...
- 艺龙java面试题_艺龙2018秋招Java笔试题
在牛客做了那么多题,终于轮到我分享了~~这是我做过的艺龙的Java笔试题哦~~ 单选题 1.设有以下递归函数: int f(int m,int n) { if(m==0) { return n+1; ...
- java自学难点_分享在达内教育培训Java的感受
刚在达内教育培训完java,给即将来培训以及已经在培的学员分享下我的感受 回想一下在达内教育学习Java时的情景,我仍然兴奋不已,其实在刚接触Java时,自己确实有点晕,但经过一段时间学习,逐渐走出了 ...
- java俄罗斯方块视频_[VIP视频]【A0233】java面对对象编程-俄罗斯方块视频教程 高清视频 百度云 百度网...
Java视频教程名称:java面对对象编程-俄罗斯方块视频教程 俄罗斯方块视频教程 $ X0 X1 Z: W4 P3 T e. m3 q百度网盘下载链接: . M% x- I- V5 p( J 游 ...
- java读书心得_范文精选-读书心得体会-java夜未眠读书心得
1 java 夜未眠读书心得 通过参加这次的 java 夜未眠读书培训,这个对于系统的扩展是很有用处的. new 已经决定了你肯定要这个类, 而静态方法却可以修改, 不一定肯定返回你方 法所在的类,可 ...
- java 底层运行_从表面到底层丨Java和JVM的运行原理,现在带给你
Java,编程语言,被创造于90年代初,在经历了这么多年的风风雨雨,Java已经成长为世界第一的编程语言,根据往期以及目前的数据来看,Java的使用频率为全球第一,即使偶尔会有第二第三的情况,但是这依 ...
最新文章
- 时序数据采样、原始循环神经网络RNN、RNN梯度爆炸原因推导
- Font Rending 的 Hint 机制对排版的影响
- Python中包含义及其定义
- easyui树拖拽排序java_easyui tree 拖拽功能并将数据返回后台保存至数据库
- cmos摄像头如何识别颜色_绝对实用!开车上路怕违章 教你如何识别各种违章摄像头...
- ListView自定义视图中对Button按钮实现仅允许一个按钮处于开启状态
- python把数据写入excel_Python向excel中写入数据的方法
- eclipse源服务器未能找到,eclipse - HTTP状态[404]? [未找到](原始服务器未找到当前表示) - 堆栈内存溢出...
- 粉红噪音_粉红的常绿力量
- matlab如何实现降维,matlab怎么把矩阵降维
- [转载] python的变量和C++的变量有什么区别
- MySQL数据库优化之索引优化
- 如何更换tomcat版本
- PCL:三维点云概述(一)
- SQL数据库练习题以及答案(46例题)
- java 调用本地播放器_Java调用本地播放器播放视频文件
- Android 开发多摄像头 API
- 谷歌地图创建自定义位置_如何使用Google Home为任何命令创建自定义快捷方式
- 【已解决】superset创建admin用户失败:Error! User already exists user 或 AttributeError: ‘NoneType‘
- HarmonyOS与Android的全面对比
热门文章
- Windows中EFS加密及解密应用
- webBrowser强制在本窗口打开,禁止在新窗口打开
- .Net软件UI界面测试自动化--UIAutomation技术
- 采用ASP.NET IIS 注册工具 (Aspnet_regiis.exe)对web.config实行本地加密
- Oracle中NVARCHAR2与VARCHAR2的相互转换
- 如何从Windows远程上传文件到Linux(例如CentOS 7)
- 学习 WCF (3)--开发WCF客户程序
- explain查看mysql语句的执行效率
- MySQL的Found_ROWS函数介绍
- Vi经典插件ctags(转)