为了账号安全,请及时绑定邮箱和手机立即绑定

java如何实现下面算法

java如何实现下面算法

紫衣仙女 2018-07-05 22:10:09
某日,一个项目经理接受到客户需求,经过讨论将其分解为5个任务,由于任务依赖关系和人员调度问题,每个任务的开始结束时间以及所需人力可能存在差异。具体如下:任务A:开始时间为:8月1日,结束时间为:8月5日,所需人力:5人日任务B:开始时间为:8月2日,结束时间为:8月4日,所需人力:2人日任务C:开始时间为:8月4日,结束时间为:8月6日,所需人力:2人日任务D:开始时间为:8月5日,结束时间为:8月8日,所需人力:3人日任务E:开始时间为:8月9日,结束时间为:8月10日,所需人力:1人日该项目经理现在给一个技术骨干安排任务,要求其在8月1日到8月10日间,完成尽可能多的任务,编写一个Java程序根据任务的开始结束时间,所需人力,求出指定时长内能够完成的最大任务数。要求和限制:1. 任务之间不能重叠2. 一个任务的结束时间不能和另一个任务的开始时间相等,比如任务B的结束时间和任务C的开始时间相等
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

// 大概看了一下, 发现所需人力没说明什么用,在本题中处于什么条件

// 只说思路 要去买饭, 懒得写code

 

// 1. 定义一个Task 属性 开始时间 结束时间 人力

 

// 2. 将5个任务放到一个集合中 tasks = List<Task>

 

// 3. 循环输出,第一次拿Task1的endTime与下一个Task的startTime比较,如果小则count计数+1

// 并将Task1的endTime = (下一个Task的endTime)

// 这写一下吧

Date endTime = null;

int count = 0; 

 

for(Task task: tasks){ // 第一种情况第一个任务他参与, 第二种情况他从第二个任务参与

    endTime  = task.EndTime;

    for(Task task: tasks){

        if(endTime<task.StartTime){

            count++;

            endTime = task.EndTime;

        }

    }

}

count即为最大任务数;

 

// 可能有更优方式, 懒得想了;


查看完整回答
反对 回复 2018-07-25
  • 1 回答
  • 0 关注
  • 626 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信