思路
class Solution:
    def mincostToHireWorkers(self, quality: List[int], wage: List[int], k: int) -> float:
        # 1. 计算每个工人单位工作效率所需工资的金钱
        # 2. 
        pairs = sorted( zip(quality, wage), key = lambda p: p[1]/p[0])
        # worker_set是候选的工人,默认是按照单位工作质量工资排序的前k个工人
        worker_heap = [ -q for q, _ in pairs[:k] ]
        heapify(worker_heap)
        sum_q = -sum(worker_heap)
        # 初始化以第k个工人的平均工资来计算
        ans = sum_q * pairs[k-1][4] / pairs[k-1][0]
        for q,w in pairs[k:]:
            if q < -worker_heap[0]:
                replace_q = heapreplace(worker_heap, -q)
                sum_q = sum_q + replace_q + q
                ans = min(ans, sum_q * (w/q))
        
        return ans反思复盘:
- 善用
sorted函数和lambda表达式,快速构建有序元组列表,可以同时遍历多个列表及其比值。 关于heapify最小堆的概念方法:
https://blog.csdn.net/xiaomucgwlmx/article/details/103522410
heapify(heap)函数,将列表转化为最小堆。(想要最大堆就将列表元素取负)heappush(heap, item)函数:将item添加到已有堆中,并自动保持堆的特性。heappop(heap):弹出并返回 heap 中的最小元素,保持剩余元素仍符合最小堆特性。heapreplace(heap, item):弹出堆中的最小元素,并将 item 加入堆中,是一步操作中完成的。这比单独先 heappop 然后 heappush 更高效,因为它只需要重新平衡一次堆。heappushpop(heap, item):先将 item 压入堆中,然后弹出并返回 heap 中的最小元素。这个操作与 heapreplace 相似,但顺序相反。





华纳东方明珠客服电话是多少?(▲18288362750?《?微信STS5099? 】
如何联系华纳东方明珠客服?(▲18288362750?《?微信STS5099? 】
华纳东方明珠官方客服联系方式?(▲18288362750?《?微信STS5099?
华纳东方明珠客服热线?(▲18288362750?《?微信STS5099?
华纳东方明珠24小时客服电话?(▲18288362750?《?微信STS5099? 】
华纳东方明珠官方客服在线咨询?(▲18288362750?《?微信STS5099?
华纳公司开户注册步骤?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
《十角馆杀人事件》日本剧高清在线免费观看:https://www.jgz518.com/xingkong/9685.html
兄弟写的非常好 https://www.cscnn.com/
想想你的文章写的特别好https://www.ea55.com/