
题目分析
- 根据题意我们需要计算能覆盖所有房屋的最小供暖半径,我们可以改为计算距离每个房屋最近的供暖器距离,然后这些最小距离中的最大值即为最小供暖半径。
代码
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;
};