刷脉脉时看到的,非leetcode原题。自己试着写了下,不是很难。特此记录下
思路
思路很简单,max(m)必然大于最小的木头的长度,小于最大的木头长度。使用二分法求解即可。唯一需要注意的是,如果我们找出了符合k的长度,还是需要继续查找。因为题目中的要求是至少k个。
二分法
const getMaxLength = (arr, k) => {
let m = 0;
arr = arr.sort((a, b) => a - b)
const binarySearch = (start, end) => {
if (start <= end) {
const len = Math.floor(((start + end) / 2))
let count = 0
for (let i = 0; i < arr.length; i++) {
count += Math.floor(arr[i] / len)
}
if (count >= k) {
m = Math.max(m, len)
binarySearch(len + 1, end)
} else {
binarySearch(start, len - 1)
}
}
}
binarySearch(arr[0], arr[arr.length - 1])
return m
}