File tree 1 file changed +42
-0
lines changed
1 file changed +42
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {string[] } req_skills
3
+ * @param {string[][] } people
4
+ * @return {number[] }
5
+ */
6
+ const smallestSufficientTeam = function ( req_skills , people ) {
7
+ const m = req_skills . length ,
8
+ n = people . length ,
9
+ limit = 1 << m
10
+ const skillIdxMap = { }
11
+ for ( let i = 0 ; i < m ; i ++ ) {
12
+ skillIdxMap [ req_skills [ i ] ] = i
13
+ }
14
+ const dp = Array ( limit )
15
+
16
+ dp [ 0 ] = [ ]
17
+
18
+ for ( let i = 0 ; i < n ; i ++ ) {
19
+ let skillMask = 0
20
+ for ( let j = 0 ; j < people [ i ] . length ; j ++ ) {
21
+ skillMask |= ( 1 << skillIdxMap [ people [ i ] [ j ] ] )
22
+ }
23
+
24
+ for ( let j = 0 ; j < dp . length ; j ++ ) {
25
+ if ( dp [ j ] == null ) continue
26
+ const prev = j
27
+ const comb = prev | skillMask
28
+
29
+ if ( dp [ comb ] == null || dp [ comb ] . length > dp [ prev ] . length + 1 ) {
30
+
31
+ dp [ comb ] = dp [ prev ] . slice ( )
32
+ dp [ comb ] . push ( i )
33
+ }
34
+ }
35
+ }
36
+
37
+ return dp [ limit - 1 ]
38
+ }
39
+
40
+ // another
41
+
42
+
1
43
/**
2
44
* @param {string[] } req_skills
3
45
* @param {string[][] } people
You can’t perform that action at this time.
0 commit comments