44 lines
941 B
Kotlin
44 lines
941 B
Kotlin
|
class Solution {
|
||
|
private fun canDistribute(
|
||
|
n: Int,
|
||
|
quantities: IntArray,
|
||
|
pivot: Int,
|
||
|
): Boolean {
|
||
|
var j = 0
|
||
|
var remaining = quantities[j]
|
||
|
|
||
|
return (1..n).any {
|
||
|
if (remaining <= pivot) {
|
||
|
j += 1
|
||
|
if (j == quantities.size) {
|
||
|
return@any true
|
||
|
}
|
||
|
|
||
|
remaining = quantities[j]
|
||
|
} else {
|
||
|
remaining -= pivot
|
||
|
}
|
||
|
|
||
|
return@any false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fun minimizedMaximum(
|
||
|
n: Int,
|
||
|
quantities: IntArray,
|
||
|
): Int {
|
||
|
var (left, right) = 0 to quantities.max()
|
||
|
|
||
|
while (left < right) {
|
||
|
val middle = (left + right) / 2
|
||
|
if (canDistribute(n, quantities, middle)) {
|
||
|
right = middle
|
||
|
} else {
|
||
|
left = middle + 1
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return left
|
||
|
}
|
||
|
}
|