题目描述
- 给定一个数组和一个数字 n,把数组按顺序分成 n 份,求单份上限的最小值
示例
输入:weights = [1,2,3,4,5,6,7,8,9,10], days = 5
输出:15
解释:(1 2 3 4 5), (6 7), (8), (9), (10)
输入:weights = [3,2,2,4,1,4], days = 3
输出:6
输入:weights = [1,2,3,1,1], days = 4
输出:3
题解
func shipWithinDays(weights []int, days int) int {
l, r := 0, 50000 * 500 // len(weights): [1, 5w], weights[i]: [1, 500]
for l < r {
mid := (l + r) / 2
if check(weights, mid, days) { r = mid
} else { l = mid + 1 }
}
return r
}
func check(weights []int, mid, days int) bool {
cnt, s := 1, 0
for _, w := range weights {
if mid < w { return false }
if mid < s + w {
cnt ++
s = 0
}
s += w
}
return cnt <= days
}