475. Heaters
View on LeetCode ↗
C++
class Solution {public: // if we cover all houses with heaters, return true, else return false, bool heater_check(int radius, int num_heaters, int num_houses, vector<int>& houses, vector<int>& heaters) { int he = 0; int ho = 0; while (he < num_heaters && ho < num_houses) { if (abs(houses[ho] - heaters[he]) <= radius) { ho++; } else { he++; } // reach heaters first, return false, all heaters exhausted if (he == num_heaters) return false; } // we got all houses or not return ho == num_houses; } int findRadius(vector<int>& houses, vector<int>& heaters) { sort(houses.begin(), houses.end()); sort(heaters.begin(), heaters.end()); int ans = -1; int l = 0, r = INT_MAX, mid; while (l <= r) { mid = l + (r - l) / 2; if (heater_check(mid, heaters.size(), houses.size(), houses, heaters)) { r = mid - 1; ans = mid; } else { l = mid + 1; } } return ans; }};