1760. 袋子里最少数目的球

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution:
def minimumSize(self, nums: List[int], maxOperations: int) -> int:
# 设计一个check方法来 判断此开销是否 可以满足条件。
def check(x)->bool:
ans = 0
for n in nums:
if n%x==0:
ans += n//x-1
else:
ans += n//x
return ans <= maxOperations
# 二分法来找开销,题目要求是 最小化开销。 (maxoperations 和 开销 单调 成反比例)
def search_II(check)->int:
nums.sort()
left = 1 # 正整数再怎么分也不会分出0
right = nums[len(nums)-1]
while left<=right:
mid = (left+right)>>1
if check(mid): # 能够满足条件,题目要求找最小化,就往更小的找。
right = mid-1
else:
left = mid+1
return left
return search_II(check)