-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path690.employee-importance.java
136 lines (124 loc) · 3.46 KB
/
690.employee-importance.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
* @lc app=leetcode id=690 lang=java
*
* [690] Employee Importance
*
* https://leetcode.com/problems/employee-importance/description/
*
* algorithms
* Easy (58.49%)
* Total Accepted: 98.8K
* Total Submissions: 168.9K
* Testcase Example: '[[1,2,[2]], [2,3,[]]]\n2'
*
* You are given a data structure of employee information, which includes the
* employee's unique id, their importance value and their direct subordinates'
* id.
*
* For example, employee 1 is the leader of employee 2, and employee 2 is the
* leader of employee 3. They have importance value 15, 10 and 5, respectively.
* Then employee 1 has a data structure like [1, 15, [2]], and employee 2 has
* [2, 10, [3]], and employee 3 has [3, 5, []]. Note that although employee 3
* is also a subordinate of employee 1, the relationship is not direct.
*
* Now given the employee information of a company, and an employee id, you
* need to return the total importance value of this employee and all their
* subordinates.
*
* Example 1:
*
*
* Input: [[1, 5, [2, 3]], [2, 3, []], [3, 3, []]], 1
* Output: 11
* Explanation:
* Employee 1 has importance value 5, and he has two direct subordinates:
* employee 2 and employee 3. They both have importance value 3. So the total
* importance value of employee 1 is 5 + 3 + 3 = 11.
*
*
*
*
* Note:
*
*
* One employee has at most one direct leader and may have several
* subordinates.
* The maximum number of employees won't exceed 2000.
*
*
*/
/*
// Definition for Employee.
class Employee {
public int id;
public int importance;
public List<Integer> subordinates;
};
*/
// Given information:
// List if Employee class unique id, importance, List of subordinates' id
// Max Employee 2000
// At least 1 employee has direct leader and more than 1 subordinates
// Return all importance value of current employee and the subordinates
//
// Recursion?
// Needs to have the indexes correlated to the employee id
// Convert List into HashMap
// Nested loops?
// Needs to have a way of skipping employees already been searched
// RECURSION - Depth-First Search
// Convert List into HashMap with id as the key
// Store total importance value
// Get root employee
// if root employee has no subordinates
// return importance value
// else, loop over subordinates and recurse down
class Solution {
public Map<Integer, Employee> roster;
public int getImportance(List<Employee> employees, int id) {
if (employees == null) return 0;
roster = new HashMap<Integer, Employee>();
for (Employee e : employees) {
roster.put(e.id, e);
}
return calculateImportance(id);
}
public int calculateImportance(int id) {
Employee lead = roster.get(id);
int totalImp = lead.importance;
if (lead.subordinates.isEmpty()) {
return totalImp;
} else {
for (int subId : lead.subordinates) {
totalImp += calculateImportance(subId);
}
}
return totalImp;
}
}
// // NESTED LOOPS
// class Solution {
// HashMap<Integer, Employee> roster;
// public int getImportance(List<Employee> employees, int id) {
// if (employees == null) return 0;
// roster = new HashMap<>();
//
// for (Employee e : employees) {
// roster.put(e.id, e);
// }
//
// int totalImp = 0;
// Queue<Employee> q = new LinkedList<>();
// q.add(roster.get(id));
//
// while (!q.isEmpty()) {
// Employee curr = q.poll();
// totalImp += curr.importance;
// for (int subID : curr.subordinates) {
// q.add(roster.get(subID));
// }
// }
//
// return totalImp;
// }
// }