最大化最小间隔
问题:给定三个输入:
- 可种植的树的数量(
n
):需要种植的树木总数 - 坐标点数组(
positions
):每个元素表示一个适合种树的位置坐标(一维或二维) - 必须种植的树木数量(
k
):k ≤ n
,且k ≤ positions.length
从 positions
中选择 k
个点种植树木,使得所有相邻树木之间的 最小间距 尽可能大。
最终返回这个 最大的最小间距值。
- 这里用到的算法逻辑是:二分算法 + 贪心算法
- 可以再尝试做下:力扣 - 1552. Magnetic Force Between Two Balls
function maxMinSpacing(rightSize, rightArr, treeNum) {
rightArr.sort((a, b) => a - b);
let left = 0; // left 和 right 左右指针
let right = rightArr[rightSize - 1] - rightArr[0];
let result = 0;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
let count = 1; // 第一个点必选
let lastPos = rightArr[0];
for (let i = 1; i < rightSize; i++) {
if (rightArr[i] - lastPos >= mid) {
count++;
lastPos = rightArr[i];
if (count === treeNum) break;
}
}
if (count >= treeNum) {
result = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
return result;
}