Maximum Number of Tasks You Can Assign LeetCode solution in C++

1
class Solution {
2
public:
3
int maxTaskAssign(vector<int> &tasks, vector<int> &workers, int pills, int strength) {
4
sort(begin(workers), end(workers));
5
sort(begin(tasks), end(tasks));
6

7
int lTasks = -1, rTasks = min(tasks.size(), workers.size()) - 1;
8

9
while (lTasks < rTasks) {
10
int midTasks = (lTasks + rTasks + 1) >> 1, t = midTasks;
11
deque<int> dq;
12

13
for (int w = workers.size() - 1, freePills = pills; t >= 0; t--) {
14
if (dq.size() > 0 && dq.front() >= tasks.at(t)) {
15
dq.pop_front();
16
} else if (w >= 0 && workers.at(w) >= tasks.at(t)) {
17
w--;
18
} else if (freePills > 0) {
19
while (w >= 0 && workers.at(w) + strength >= tasks.at(t)) dq.push_back(workers.at(w--));
20

21
if (dq.size() == 0) break;
22
dq.pop_back(), freePills--;
23
} else
24
break;
25
}
26

27
t == -1 ? lTasks = midTasks : rTasks = midTasks - 1;
28
}
29

30
return lTasks + 1;
31
}
32
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0