Skip to content

Commit aaabe80

Browse files
authored
Create 2071.Maximum-Number-of-Tasks-You-Can-Assign.cpp
1 parent 07111e4 commit aaabe80

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
class Solution {
2+
public:
3+
int maxTaskAssign(vector<int>& tasks, vector<int>& workers, int pills, int strength)
4+
{
5+
sort(tasks.begin(), tasks.end());
6+
sort(workers.begin(), workers.end());
7+
int left = 0, right = tasks.size();
8+
while (left < right)
9+
{
10+
int mid = right - (right - left)/2;
11+
if (checkOK(tasks, workers, pills, strength, mid))
12+
left = mid;
13+
else
14+
right = mid-1;
15+
}
16+
return left;
17+
}
18+
19+
bool checkOK(vector<int>& tasks, vector<int>& workers, int pills, int strength, int num)
20+
{
21+
if (num > tasks.size()) return false;
22+
if (num > workers.size()) return false;
23+
24+
multiset<int>Set(workers.begin(), workers.end());
25+
26+
for (int i=num-1; i>=0; i--)
27+
{
28+
if (*Set.rbegin() >= tasks[i])
29+
{
30+
Set.erase(prev(Set.end()));
31+
}
32+
else
33+
{
34+
if (pills == 0) return false;
35+
auto iter = Set.lower_bound(tasks[i]-strength);
36+
if (iter == Set.end()) return false;
37+
Set.erase(iter);
38+
pills--;
39+
}
40+
}
41+
return true;
42+
}
43+
};

0 commit comments

Comments
 (0)