题目
思路
- 对于一个房子而言,要么是它左边最近的供暖器供暖,要么是它右边最近的供暖器供暖。
 - 现在的问题就是如何在供暖器序列当中找到,特定房子的左边最近距离和右边最近距离
 - 通过二分查找确定左边最近距离(找到供暖器序列当中小于等于
cur_house_pos的右端点即可) 
代码
class Solution {public:    int findRadius(vector<int>& houses, vector<int>& heaters) {        // 对于所有的房屋而言,要么是前一个供暖器,要么是后一个供暖器供应        // 那么,检查所有的房屋,可以得到最大值,就是需要的最小加热半径        sort(houses.begin(), houses.end());        sort(heaters.begin(), heaters.end());        int num_houses = houses.size(), num_heaters = heaters.size();        long long min_radius = 0;        for (int i = 0; i < num_houses; ++i) {            int cur_house_pos = houses[i];            // 找到小于等于房屋位置的最右边的供暖器            int left = 0, right = num_heaters - 1;            while (left < right) {                int mid = (left + right + 1) / 2;                if (heaters[mid] <= cur_house_pos) {                    left = mid;                } else {                    right = mid - 1;                }            }            // 小于等于房屋位置的供暖器可能不存在,heaters[right]可能是大于房屋位置的最左边数字            // 因此需要加上abs            long long dis_before = abs(cur_house_pos - heaters[right]);            left = 0, right = num_heaters - 1;            while (left < right) {                int mid = (left + right) / 2;                if (heaters[mid] >= cur_house_pos) {                    right = mid;                } else {                    left = mid + 1;                }            }            long long dis_after = abs(heaters[left] - cur_house_pos);            min_radius = max(min_radius, min(dis_before, dis_after));        }        return min_radius;    }};