这道题我们可以采用贪心算法每次找到离这个房屋的最短距离最后求取最大值即可。首先可以先将heaters排序这样可以方便使用二分查找然后创建寻找最小距离的函数每次传入房子所在的位置在heaters中使用二分查找找到离这个点最近的点若是有则为0若没有则比较左边的和右边的哪个离得更近。返回更近的数值。参数引用要使用引用传递不然会超内存。class Solution { public: int findHeaters(const vectorint heaters,int n){ int left0; int rightheaters.size()-1; if(nheaters[0]){ return heaters[0]-n; } if(nheaters[heaters.size()-1]){ return n-heaters[heaters.size()-1]; } while(leftright){ int midleft(right-left)/2; if(heaters[mid]n){ return 0; } else if(heaters[mid]n){ rightmid-1; } else if(heaters[mid]n){ leftmid1; } } int resmin(n-heaters[left-1],heaters[left]-n); return res; } int findRadius(vectorint houses, vectorint heaters) { sort(heaters.begin(),heaters.end()); int ans0; for(int i0;ihouses.size();i){ ansmax(findHeaters(heaters,houses[i]),ans); } return ans; } };