Leetcode 2861. Maximum Number of Alloys

本文介绍了LeetCode题目2861的解题思路,利用二分搜索法确定在给定预算下每台机器的最大合金生产数量,提供了Python代码实现,运行时间355ms,内存占用16.9MB。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 解题思路

这一题思路上还是挺清晰的,就是对每一台机子看一下其在给定的budget下能够生产的最多合金数。

问题就在于如何求每一台机子能够生产的最大合金数,由于存在stock,因此这里要直接求解多少还是有些复杂的,不过如果给定要生产的合金数,要反推需要的budget数目却是简单的。

所以这里我采用的方式是使用二分搜索的方式找到最大可以生产的合金数,从而搞定了这道题。

2. 代码实现

给出python代码实现如下:

class Solution:
    def maxNumberOfAlloys(self, n: int, k: int, budget: int, composition: List[List[int]], stock: List[int], cost: List[int]) -> int:
        
        def produce(comp):
            i, j = 0, (budget // cost[0] + stock[0]) // comp[0] + 1
            while j-i > 1:
                mid = (i+j) // 2
                cnt = 0
                for idx, c in enumerate(comp):
                    cnt += max(c * mid - stock[idx], 0) * cost[idx]
                    if cnt > budget:
                        break
                if cnt > budget:
                    j = mid
                else:
                    i = mid
            return i
        
        res = [produce(comp) for comp in composition]
        return max(res)

提交代码评测得到:耗时355ms,占用内存16.9MB。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值