Medium
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, andworker[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.
$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.
Example 1:
Input: difficulty = [2,4,6,8,10], profit = [10,20,30,40,50], worker = [4,5,6,7]
Output: 100
Explanation: Workers are assigned jobs of difficulty [4,4,6,6] and they get a profit of [20,20,30,30] separately.
Example 2:
Input: difficulty = [85,47,57], profit = [24,66,99], worker = [40,25,25]
Output: 0
Constraints:
n == difficulty.lengthn == profit.lengthm == worker.length1 <= n, m <= 1041 <= difficulty[i], profit[i], worker[i] <= 105class Solution {
fun maxProfitAssignment(difficulty: IntArray, profit: IntArray, worker: IntArray): Int {
val n = 100000
val maxProfit = IntArray(n)
for (i in difficulty.indices) {
maxProfit[difficulty[i]] = maxProfit[difficulty[i]].coerceAtLeast(profit[i])
}
for (i in 1 until n) {
maxProfit[i] = maxProfit[i].coerceAtLeast(maxProfit[i - 1])
}
var sum = 0
for (efficiency in worker) {
sum += maxProfit[efficiency]
}
return sum
}
}