1. 题目描述
员工信息的定义如下:
class Employee {
public int happy; // 这名员工可以带来的快乐值
List<Employee> subordinates; // 这名员工有哪些直接下级
}
公司的每个员工都符合 Employee 类的描述。整个公司的人员结构可以看作是一棵标准的、 没有环的多叉树
树的头节点是公司唯一的老板,除老板之外的每个员工都有唯一的直接上级
叶节点是没有任何下属的基层员工(subordinates列表为空),除基层员工外每个员工都有一个或多个直接下级
这个公司现在要办party,你可以决定哪些员工来,哪些员工不来,规则:
1.如果某个员工来了,那么这个员工的所有直接下级都不能来。(间接下级可以来)
2.派对的整体快乐值是所有到场员工快乐值的累加
3.你的目标是让派对的整体快乐值尽量大
给定一棵多叉树的头节点boss,请返回派对的最大快乐值。
2. 测试案例
- 树空
- 树不空
3. 最佳思路
注意:对于n叉树,其获取子结点信息和设置info信息可以同步进行,这样代码更加简洁。
4. 代码
import java.util.LinkedList;
import java.util.List;
public class Main {
static class Employee {
public int value;
public List<Employee> subordinates;
public Employee(int value) {
this.value = value;
this.subordinates = new LinkedList<>();
}
}
static class Info {
public int comeMaxHappy;
public int offMaxHappy;
public Info(int comeMaxHappy, int offMaxHappy) {
this.comeMaxHappy = comeMaxHappy;
this.offMaxHappy = offMaxHappy;
}
}
public static void main(String[] args) {
Employee boss = new Employee(1);
Employee tow = new Employee(2);
Employee three = new Employee(3);
Employee four = new Employee(4);
Employee five = new Employee(5);
Employee six = new Employee(6);
Employee seven = new Employee(7);
boss.subordinates.add(0, tow);
boss.subordinates.add(1, three);
tow.subordinates.add(0, four);
tow.subordinates.add(1, five);
three.subordinates.add(0, six);
three.subordinates.add(1, seven);
System.out.println(getMaxHappySize(boss));
}
public static int getMaxHappySize(Employee root) {
Info info = pos(root);
return Math.max(info.comeMaxHappy, info.offMaxHappy);
}
public static Info pos(Employee cur) {
/* 0. 边界条件 */
if (cur == null)
return new Info(0, 0);
/* 1. 获取子树信息,实例化当前结点的Info对象,将info对象的信息设置正确 */
Info info = new Info(cur.value, 0);
for (Employee next : cur.subordinates) {
Info childInfo = pos(next);
info.comeMaxHappy += childInfo.offMaxHappy;
info.offMaxHappy += Math.max(childInfo.comeMaxHappy, childInfo.offMaxHappy);
}
/* 2. 返回当前结点的info对象 */
return info;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84579.html