← Back to LeetCode Notes

475. Heaters

medium · array · two-pointers · binary-search · sorting · solved 2026.08.28 · 10 sec read

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;    }};