链接:1760. 袋子里最少数目的球
题单:
思路:
[1, max{nums[0~n-1]}
。[1,y]
的操作次数是 0,在 [y+1, 2y]
的操作次数是 1。综上,本题实际上不是很难,值得一提的是:
坑点:
func minimumSize(nums []int, maxOperations int) int {
check := func(k int) bool {
cnt := 0
for _, v := range nums {
cnt += (v - 1) / k
}
return cnt > maxOperations
}
l, r := 1, slices.Max(nums)
for l < r {
mid := (l + r) / 2
if check(mid) {
l = mid + 1
} else {
r = mid
}
}
return l
}
库函数写法:
func minimumSize(nums []int, maxOperations int) int {
max := 0
for _, x := range nums {
if x > max {
max = x
}
}
return sort.Search(max, func(y int) bool {
if y == 0 {
return false
}
ops := 0
for _, x := range nums {
ops += (x - 1) / y
}
return ops <= maxOperations
})
}