Heaters
Solution & Analysis
Binary Search + Loop
class Solution {
public int findRadius(int[] houses, int[] heaters) {
Arrays.sort(heaters);
int radius = Integer.MIN_VALUE;
for (int house: houses) {
int index = binarySearch(heaters, house);
int distLeft = index >= 1 ? house - heaters[index - 1] : Integer.MAX_VALUE;
int distRight = index < heaters.length ? heaters[index] - house: Integer.MAX_VALUE;
radius = Math.max(Math.min(distLeft, distRight), radius);
}
return radius;
}
private int binarySearch(int[] heaters, int house) {
int lo = 0;
int hi = heaters.length - 1;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (heaters[mid] == house) {
return mid;
} else if (heaters[mid] < house) {
lo = mid + 1;
} else {
hi = mid - 1;
}
}
return lo;
}
}Reference
Last updated