问题描述:给你一个Employee类型代表公司员工,其中ID唯一,importance代表员工重要性,subordinates为该员工下属员工id。问,某个员工的重要性与其所有下属员工的重要性之和。
思路:使用map记录id与员工的关联,然后不断遍历下属员工并相加重要性。
原代码:
public int getImportance(List<Employee> employees, int id) {
int length=employees.size();
Map<Integer,Employee> empMap=new HashMap<Integer,Employee>();
for(int i=0;i<length;i++){
Employee e=employees.get(i);
empMap.put(e.id,e);
List<Integer> list=e.subordinates;
}
boolean flag=true;
int totalImportance=0;
Employee e=empMap.get(id);
totalImportance=totalImportance+e.importance;
totalImportance=countImportance(totalImportance,e.subordinates,empMap);
return totalImportance;
}
private int countImportance(int importance,List<Integer> list,Map<Integer,Employee> empMap){
int size=list.size();
if(size==0)
return importance;
List<Integer> nextList=new ArrayList();
for(int i=0;i<size;i++){
Employee e=empMap.get(list.get(i));
nextList.addAll(e.subordinates);
importance=importance+e.importance;
}
return countImportance(importance,nextList,empMap);
}
最佳代码:
private Map<Integer, Employee> map;
public int getImportance(List<Employee> employees, int id) {
map=new HashMap<>();
for(Employee e: employees){
map.put(e.id, e);
}
return sum(map.get(id));
}
private int sum(Employee e){
int sum=e.importance;
for(Integer i: e.subordinates){
sum+=sum(map.get(i));
}
return sum;
}
思路基本一致,但是精简性相差不少。以后写完代码需要考虑可以不可以精简代码了。