Find Minimum Time to Finish All Jobs LeetCode solution in JavaScript

1
var minimumTimeRequired = function (jobs, k) {
2
let n = jobs.length,
3
maskSum = [...Array(1 << n)].map((d) => 0);
4
for (
5
let mask = 0;
6
mask < 1 << n;
7
mask++ //pre-store the sums of every mask
8
)
9
for (let i = 0; i < n; i++)
10
maskSum[mask] += Number(((1 << i) & mask) != 0) * jobs[i];
11
let dp = [...Array(k + 1)].map((d) =>
12
[...Array(1 << n)].map((d) => Infinity)
13
);
14
dp[0][0] = 0;
15
for (
16
let i = 1;
17
i <= k;
18
i++ //for each new person
19
)
20
for (
21
let curmask = 0;
22
curmask < 1 << n;
23
curmask++ //guess what his mask can be, what items can he select
24
)
25
for (
26
let prevmask = 0;
27
prevmask < 1 << n;
28
prevmask++ // but also, guess what the previous i-1 persons took already
29
)
30
if ((curmask & prevmask) === 0)
31
//obviously, 2 people can't take the same job
32
dp[i][curmask | prevmask] = Math.min(
33
dp[i][curmask | prevmask],
34
Math.max(dp[i - 1][prevmask], maskSum[curmask])
35
);
36
return dp[k][(1 << n) - 1];
37
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0