Maximum Number of Tasks You Can Assign LeetCode solution in Java

1
class Solution {
2

3
public int maxTaskAssign(int[] tasks, int[] workers, int pills, int strength) {
4
Arrays.sort(tasks);
5
Arrays.sort(workers);
6

7
int st = 0;
8
int end = Math.min(tasks.length, workers.length) - 1;
9
int ans = 0;
10
while (st <= end) {
11
int mid = (st + end) / 2;
12
if (isPossible(tasks, workers, pills, strength, mid)) {
13
st = mid + 1;
14
ans = Math.max(ans, mid + 1);
15
} else {
16
end = mid - 1;
17
}
18
}
19
return ans;
20
}
21

22
boolean isPossibleToComplete(int[] tasks, int[] workers, int pills, int strength, int mid) {
23
int n = workers.length;
24
TreeMap<Integer, Integer> map = new TreeMap<>();
25

26
for (int i = n - 1, count = 0; count <= mid && i >= 0; i--, count++) {
27
map.merge(workers[i], 1, (a, b) -> a + b);
28
}
29
int done = n - 1;
30
int count = mid;
31
for (int i = mid; i >= 0; i--) {
32
int val = tasks[i];
33
Integer kv = map.ceilingKey(val);
34
if (kv != null) {
35
updateMap(map, kv);
36
} else {
37
if (pills > 0) {
38
int newStrg = val - strength;
39
Integer newKv = map.ceilingKey(newStrg);
40
if (newKv != null) {
41
updateMap(map, newKv);
42
pills--;
43
} else {
44
return false;
45
}
46
} else {
47
return false;
48
}
49
}
50
}
51
return true;
52
}
53

54
void updateMap(TreeMap<Integer, Integer> map, int key) {
55
int vl = map.get(key);
56
map.put(key, vl - 1);
57
if (vl - 1 == 0) {
58
map.remove(key);
59
}
60
}
61
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0