Re: [闲聊] 每日leetcode

楼主: JIWP (JIWP)   2024-06-22 01:50:03
最后一题
这几天写的纪录完了
之后还是每天纪录不要偷懒
826. Most Profit Assigning Work
有n件工作、m个工人
三个矩阵
difficulty:difficulty[i]是第i件工作的难度
profit:profit[i]是第i件工作的收益
worker:worker[i]是第i个工人的能力
工人不能做超出他能力的工作,当工人完成工作后可以拿到工作的收益
工人只能做一件工作,一件工作可以被多个工人做,并且收益不变
请问最多可以拿到多少收益
思路:
跟之前的IPO类似
但是因为工作都可以重复做,所以不用用到heap
将profit、difficulty依照difficulty的大小排序
并且也把worker依照能力排序
接着去遍历worker,记录满足worker[i]>=difficulty[j]的最大利益
每次加上这个利益
就可以得到答案了
golang code :
func maxProfitAssignment(difficulty []int, profit []int, worker []int) int {
n, m, res, maxprofit, idx := len(difficulty), len(worker), 0, 0, 0
slices.Sort(worker)
rec := make([][2]int, n)
for key, val := range difficulty {
rec[key][0] = val
rec[key][1] = profit[key]
}
slices.SortFunc(rec, func(i, j [2]int) int { return i[0] - j[0] })
for i := 0; i < m; i++ {
for idx < n && rec[idx][0] <= worker[i] {
maxprofit = max(maxprofit, rec[idx][1])
idx++
}
res += maxprofit
}
return res
}
作者: smart0eddie (smart0eddie)   2024-06-22 04:16:00
工作可以重复指定感觉worker 不用排工作照profit 排每个人一直从最高收益往下找到他能做的

Links booklink

Contact Us: admin [ a t ] ucptt.com