Leetcode 2861. Maximum Number of Alloys

  • Leetcode 2861. Maximum Number of Alloys
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:2861. Maximum Number of Alloys

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。

你可能感兴趣的:(leetcode笔记,leetcode,周赛363,leetcode,2861,二分查找)