最大化最小间隔

Posted by CodingWithAlice on March 25, 2025

最大化最小间隔

问题:给定三个输入:

  1. 可种植的树的数量(n:需要种植的树木总数
  2. 坐标点数组(positions:每个元素表示一个适合种树的位置坐标(一维或二维)
  3. 必须种植的树木数量(kk ≤ n,且 k ≤ positions.length

positions 中选择 k 个点种植树木,使得所有相邻树木之间的 最小间距 尽可能大。 最终返回这个 最大的最小间距值

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;
}