描述
冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。
在加热器的加热半径范围内的每个房屋都可以获得供暖。
现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。
说明:所有供暖器都遵循你的半径标准,加热的半径也一样。
分析
双指针解法,首先对houses、heaters排序,然后求出每个houses需要的最小半径,记录最大的半径。
class Solution {
public int findRadius(int[] houses, int[] heaters) {
Arrays.sort(houses);
Arrays.sort(heaters);
int ans = 0;
int i = 0, j = 0;
while(i < houses.length){
int r = Math.abs(heaters[j]-houses[i]);
while(j+1 < heaters.length && r >= Math.abs(heaters[j+1]-houses[i])){
r = Math.abs(heaters[j+1]-houses[i]);
j++;
}
ans = Math.max(ans,r);
i++;
}
return ans;
}
}