Skip to content

Commit

Permalink
Create 2071.Maximum-Number-of-Tasks-You-Can-Assign.cpp
Browse files Browse the repository at this point in the history
  • Loading branch information
wisdompeak authored Nov 14, 2021
1 parent 07111e4 commit aaabe80
Showing 1 changed file with 43 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
class Solution {
public:
int maxTaskAssign(vector<int>& tasks, vector<int>& workers, int pills, int strength)
{
sort(tasks.begin(), tasks.end());
sort(workers.begin(), workers.end());
int left = 0, right = tasks.size();
while (left < right)
{
int mid = right - (right - left)/2;
if (checkOK(tasks, workers, pills, strength, mid))
left = mid;
else
right = mid-1;
}
return left;
}

bool checkOK(vector<int>& tasks, vector<int>& workers, int pills, int strength, int num)
{
if (num > tasks.size()) return false;
if (num > workers.size()) return false;

multiset<int>Set(workers.begin(), workers.end());

for (int i=num-1; i>=0; i--)
{
if (*Set.rbegin() >= tasks[i])
{
Set.erase(prev(Set.end()));
}
else
{
if (pills == 0) return false;
auto iter = Set.lower_bound(tasks[i]-strength);
if (iter == Set.end()) return false;
Set.erase(iter);
pills--;
}
}
return true;
}
};

0 comments on commit aaabe80

Please sign in to comment.