File tree Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution {
2+ public int[] smallestSufficientTeam(String[] req_skills, List<List<String>> people) {
3+
4+ final int l = req_skills.length;
5+ final int nSkills = 1 << l;
6+ Map<String, Integer> skillToId = new HashMap();
7+
8+ List<Integer>[] dp = new List[nSkills];
9+ dp[0] = new ArrayList<>();
10+
11+ for (int i = 0; i < req_skills.length; ++i){
12+ skillToId.put(req_skills[i], i);
13+ }
14+
15+ for (int i = 0; i < people.size(); ++i) {
16+ final int currSkill = getSkill(people.get(i), skillToId);
17+ for (int j = 0; j < nSkills; ++j) {
18+ if (dp[j] == null){
19+ continue;
20+ }
21+ final int newSkillSet = currSkill | j;
22+ if (newSkillSet == j){ // Adding people[i] doesn't increase skill set
23+ continue;
24+ }
25+ if (dp[newSkillSet] == null || dp[newSkillSet].size() > dp[j].size() + 1) {
26+ dp[newSkillSet] = new ArrayList<>(dp[j]);
27+ dp[newSkillSet].add(i);
28+ }
29+ }
30+ }
31+ return dp[nSkills - 1].stream().mapToInt(Integer::intValue).toArray();
32+
33+ }
34+
35+ public int getSkill(List<String> person, Map<String, Integer> skillToId) {
36+ int mask = 0;
37+ for (final String skill : person){
38+ if (skillToId.containsKey(skill)){
39+ mask |= 1 << skillToId.get(skill);
40+ }
41+ }
42+ return mask;
43+ }
44+ }
You can’t perform that action at this time.
0 commit comments