LEETCODE 1760. 袋子里最少数目的球
二分查找整体思路
我们可以求出 使得每个袋子的球的数目大于等于mid 的操作次数opt
如果opt>maxOperations 那么说明分得多了,那就要增大mid
如果opt<maxOperations 那么说明分的少了,那就要减小mid
如果opt==maxOperations 其实就是所求答案,为了简化,我们可以把它归为lower_bound
怎么算拆分袋子中的球的时候需要的操作次数
代码
点击查看代码
func minimumSize(nums []int, maxOperations int) int {
var max = math.MinInt
for _, v := range nums {
if v > max {
max = v
}
}
var left = 1
var right = max + 1
for left < right {
var mid = left + (right-left)/2
var opt = 0
for i := 0; i < len(nums); i++ {
var flag = 0
if nums[i]%mid == 0 {
flag = 1
}
opt += nums[i]/mid - flag
}
if opt <= maxOperations {
right = mid
} else {
left = mid + 1
}
}
return left
}