• 475.供暖器


    2020-05-20
    供暖器

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

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

    所以,你的输入将会是房屋和供暖器的位置。你将输出供暖器的最小加热半径。

    说明:

    给出的房屋和供暖器的数目是非负数且不会超过 25000。

    给出的房屋和供暖器的位置均是非负数且不会超过10^9。

    只要房屋位于供暖器的半径内(包括在边缘上),它就可以得到供暖。

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

    题解:
    思路1:滑动窗口
    var findRadius = function (houses, heaters) {// 先排序
      houses.sort((a, b) => a - b);
      heaters.sort((a, b) => a - b);
      // 左边加入最小值,为了少判断一个j === 0的情况
      heaters.unshift(Number.MIN_SAFE_INTEGER);
      // 右边加入最大值,为了少判断j === heaters.length的情况
      heaters.push(Number.MAX_SAFE_INTEGER);
      var hLen = heaters.length;
      var radius = 0;
      var j = 1; // 供暖器index
      for (var i = 0, len = houses.length; i < len; i++) {
        var house = houses[i];
        var dis; // 房子距离两边供暖器的最小距离
    
        // 遍历找到第一个比房子大的供暖器,即找到离房子最近的右边的供暖器,则j - 1是离房子最近的右边的供暖器
        // 因为多push了一个最大值,因此不需要判断j是否已经超过越界
        while (j < hLen - 1 && house > heaters[j]) {
          j++;
        }
        dis = Math.min(house - heaters[j - 1], heaters[j] - house);
        radius = Math.max(radius, dis);
      }
      return radius;
    }
  • 相关阅读:
    驰骋工作流引擎-系统变量的引用
    驰骋工作流引擎-表单样本展示
    驰骋工作流引擎CCFLOW下载代码
    初识CSS
    初识HTML标签
    初识JDBC
    通过锁对象解决哲学家就餐问题
    MySQL基本用法
    LRU算法实现,HashMap与LinkedHashMap源码的部分总结
    Java简易实现记事本的打开与保存
  • 原文地址:https://www.cnblogs.com/lanpang9661/p/12922209.html
Copyright © 2020-2023  润新知