leetcode 475题

Posted by franki on October 27, 2022

leetcode 475 供暖器

冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。

在加热器的加热半径范围内的每个房屋都可以获得供暖。

现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。

说明:所有供暖器都遵循你的半径标准,加热的半径也一样。

示例1

输入: houses = [1,2,3], heaters = [2]
输出: 1
解释: 仅在位置2上有一个供暖器。如果我们将加热半径设为1,那么所有房屋就都能得到供暖。

示例2

输入: houses = [1,2,3,4], heaters = [1,4]
输出: 1
解释: 在位置1, 4上有两个供暖器。我们需要将加热半径设为1,这样所有房屋就都能得到供暖。

示例3

输入:houses = [1,5], heaters = [2]
输出:3

思路

暴力解法,依次遍历每个房子的坐标,再遍历每个取暖器,找到距离房子最近的取暖器坐标。在所有这些距离的长度中找到最大值,这个距离的最大值就是供暖期半径的最小值。

代码

/**
 * @param {number[]} houses
 * @param {number[]} heaters
 * @return {number}
 */
function findRadius(houses, heaters) {
    let res = 0;
    for (let i = 0; i < houses.length; i++) {
        let dis = Number.MAX_SAFE_INTEGER;
        for (let j = 0; j < heaters.length; j++) {
            dis = Math.min(dis, Math.abs(houses[i] - heaters[j]));
        }
        res = Math.max(res, dis);
    }
    return res;
}

复杂度分析:

  • 时间复杂度: O(N^2)
  • 空间复杂度:O(1)