Leetcode1283. 使结果不超过阈值的最小除数
1. 问题描述
2. 思路
二分查找,左边界为1,有边界为数组最大值
3. 代码
func smallestDivisor(nums []int, threshold int) int {
left, right := 1, getMax(nums)
for left <= right {
mid := left + (right - left) / 2
temp := countSum(nums, mid)
if temp == threshold { // 如果相等,去左侧找找,看有没有更小的
right = mid - 1
} else if temp < threshold { // 如果太小,说明除数大了,去左侧找
right = mid - 1
} else { // 如果太大,说明除数太小了,去右侧找
left = mid + 1
}
}
return left
}
func countSum(nums []int, divisor int) int {
var sum int
for i := 0; i < len(nums); i++ {
if nums[i] % divisor == 0 {
sum += nums[i] / divisor
} else {
sum = sum + nums[i] / divisor + 1
}
}
return sum
}
func getMax(nums []int) int {
max := nums[0]
for _, num := range nums {
if num > max {
max = num
}
}
return max
}