LeetCode 826. Most Profit Assigning Work
考点 | 难度 |
---|---|
Greedy | Easy |
题目
You have n jobs and m workers. You are given three arrays: difficulty, profit, and worker where:
difficulty[i] and profit[i] are the difficulty and the profit of the ith job, and
worker[j] is the ability of jth worker (i.e., the jth worker can only complete a job with difficulty at most worker[j]).
Every worker can be assigned at most one job, but one job can be completed multiple times.
For example, if three workers attempt the same job that pays $1, then the total profit will be $3. If a worker cannot complete any job, their profit is $0.
Return the maximum profit we can achieve after assigning the workers to the jobs.
思路
difficulty和profit zip到一起之后sort,worker sort,对于每个worker找到小于ability的最大profit
答案
class Solution(object):
def maxProfitAssignment(self, difficulty, profit, worker):
jobs = sorted(zip(difficulty, profit))
res = i = best = 0
for ability in sorted(worker):
while i < len(jobs) and ability >= jobs[i][0]:
best = max(jobs[i][1], best)
i += 1
res += best
return res