Heaters LeetCode solution in Java
1class Solution {2public boolean can(int r, int[] houses, int[] heaters) {3int prevHouseIdx = -1;4for (int i = 0; i < heaters.length; i++) {5int from = heaters[i] - r;6int to = heaters[i] + r;7for (int j = prevHouseIdx + 1; j < houses.length; j++) {8if (houses[j] <= to && houses[j] >= from) {9prevHouseIdx++;10} else break;11}12if (prevHouseIdx >= houses.length - 1) return true;13}14return prevHouseIdx >= houses.length - 1;15}1617public int findRadius(int[] houses, int[] heaters) {18Arrays.sort(houses);19Arrays.sort(heaters);20int lo = 0, hi = 1000000004;21int mid, ans = hi;22while (lo <= hi) {23mid = (lo + hi) / 2;24if (can(mid, houses, heaters)) {25ans = mid;26hi = mid - 1;27} else lo = mid + 1;28}29return ans;30}31}