LeetCode每日一题

106 阅读1分钟

供暖器

image.png

题目分析

  • 根据题意我们需要计算能覆盖所有房屋的最小供暖半径,我们可以改为计算距离每个房屋最近的供暖器距离,然后这些最小距离中的最大值即为最小供暖半径。

代码

/**
 * @param {number[]} houses
 * @param {number[]} heaters
 * @return {number}
 */
var findRadius = function (houses, heaters) {
  let result = -Infinity;
  heaters.sort((a, b) => a - b);
  const getMin = (value) => {
    let left = 0;
    let right = heaters.length - 1;
    if (value <= heaters[left]) return heaters[left] - value;
    if (value >= heaters[right]) return value - heaters[right];
    while (left <= right) {
      let mid = left + ((right - left) >> 1);
      if (heaters[mid] < value) {
        left = mid + 1;
      } else if (heaters[mid] > value) {
        right = mid - 1;
      } else {
        return 0;
      }
    }
    return Math.min(value - heaters[right], heaters[left] - value);
  };
  for (let i = 0, { length } = houses; i < length; ++i) {
    result = Math.max(result, getMin(houses[i]));
  }
  return result;
};