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
}

posted @ 2022-12-20 14:03  virgil_devil  阅读(104)  评论(0编辑  收藏  举报