Skip to content

Commit 51ae88f

Browse files
authored
Create Daily 16-07-23
1 parent 286b2ab commit 51ae88f

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

2023 July/Daily 16-07-23

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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+
}

0 commit comments

Comments
 (0)