【题目】
员工信息的定义如下:
public static class Employee {
public int happy;// 这名员工可以带来的欢乐值
public List<Employee> employeeList;// 这名员工有哪些直接下级
public Employee(int happy, List<Employee> employeeList) {
this.happy = happy;
this.employeeList = employeeList;
}
}
公司的每个员工都符合Employee类的描述。整个公司人员结构可以看作是一颗标准的,没有环的多叉树。树的头节点是公司的唯一的老板,除老板外,每个员工都有唯一的直接上级。叶节点是没有任何下属的基层员工,除基层员工外,每个员工都有一个或多个直接下级
,这个公司现在要办party,你可以决定那些员工来,哪些员工不来,但是要遵循如下规则:
1、如果某个员工来了,那么这个员工的所有直接下级都不能来
2、派对的整体快乐值是所有到场员工快乐值的累加
3、你的目标是让派对的整体快乐值最大
给定一个头节点boss,请返回派对的最大快乐值
要求:如果以boss为头节点的整棵树有N个节点,请做到时间复杂度为O(N)
public static ReturnType getPartyMaxHappy(Employee employee) {
if (employee == null) {
return new ReturnType(0, 0);
}
int yesMax = employee.happy;
int noMax = 0;
for (Employee employee1 : employee.employeeList) {
ReturnType temp = getPartyMaxHappy(employee1);
yesMax += temp.noMax;
noMax+= Math.max(temp.yesMax,temp.noMax);
}
return new ReturnType(yesMax, noMax);
}
public static class ReturnType {
public int yesMax;
public int noMax;
public ReturnType(int yesMax, int noMax) {
this.yesMax = yesMax;
this.noMax = noMax;
}
}