[路飞][LeetCode]475_供暖器

176 阅读1分钟

看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~

谁能九层台,不用累土起!

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

提示:

  • 1 <= houses.length, heaters.length <= 3 * 104
  • 1 <= houses[i], heaters[i] <= 109

解题思路

  • 我们做两层循环
  • 第一层遍历房屋,第二层遍历取暖器
  • 找到每个房屋能被覆盖时的最小半径
  • 返回所有最小半径中的最大值,便可保证所有房屋就都能得到供暖

解题代码

var findRadius = function(houses, heaters) {
    let nums = []
    for(let i=0;i<houses.length;i++){
        let round = Math.abs(houses[i]-heaters[0])
        for(let j=0;j<heaters.length;j++){
            if (Math.abs(houses[i]-heaters[j]) < round) {
                round = Math.abs(houses[i]-heaters[j]);
            }
        }
        nums[i]= round
    }
    return Math.max(...nums)
};

如有任何问题或建议,欢迎评论区留言讨论!