Skip to main content
  1. Posts/

LeetCode-1760 袋子里最少数目的球

·1 min·

LeetCode-1760 袋子里最少数目的球 #

Solution 1 #

如果 $k$ 开销可以, 那么 $k + 1$ 的开销也可以. 同时我们可以在 $O(n)$ 时间内验证一个开销是否能够达成. 因此用二分搜索最小开销即可. 代码如下:

class Solution:
    def minimumSize(self, nums: List[int], maxOperations: int) -> int:
        left = 1
        right = max(nums)
        while left < right:
            mid = left + (right - left) // 2
            def check(nums: List[int], maxOperations: int, k: int) -> bool:
                for v in nums:
                    maxOperations -= (v - 1) // k
                return maxOperations >= 0
            if check(nums, maxOperations, mid):
                right = mid
            else:
                left = mid + 1
        return left