Minimum Number of Work Sessions to Finish the Tasks LeetCode solution in Java

1
// Java Solution
2
class Solution {
3
public int minSessions(int[] tasks, int sessionTime) {
4
int n = tasks.length, MAX = Integer.MAX_VALUE;
5
int[][] dp = new int[1 << n][2];
6
dp[0][0] = 1;
7
dp[0][1] = 0;
8

9
for (int i = 1; i < (1 << n); i++) {
10
dp[i][0] = MAX;
11
dp[i][1] = 0;
12

13
for (int t = 0; t < n; t++) {
14
if (((1 << t) & i) == 0) continue;
15

16
int[] prev = dp[(1 << t) ^ i];
17
if (prev[1] + tasks[t] <= sessionTime) {
18
dp[i] = min(dp[i], new int[] {prev[0], prev[1] + tasks[t]});
19
} else {
20
dp[i] = min(dp[i], new int[] {prev[0] + 1, tasks[t]});
21
}
22
}
23
}
24

25
return dp[(1 << n) - 1][0];
26
}
27

28
private int[] min(int[] d1, int[] d2) {
29
if (d1[0] > d2[0]) return d2;
30
if (d1[0] < d2[0]) return d1;
31
if (d1[1] > d2[1]) return d2;
32

33
return d1;
34
}
35
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0