力扣475.供暖器
-
二分答案
- 排序之后双指针从前往后对每一个房子做判断
cpp
class Solution {
public:
int findRadius(vector<int>& houses, vector<int>& heaters) {
int n = houses.size(),m = heaters.size();
ranges::sort(houses);
ranges::sort(heaters);
auto check = [&](int r) -> bool
{
for(int i=0,j=0;i<n;i++)
{
while(j<m && houses[i] > heaters[j] + r) j++;
if(j<m && heaters[j] - r <= houses[i] && houses[i] <= heaters[j] + r) continue;
return false;
}
return true;
};
int l = 0,r = (int)1e9;
while(l<r)
{
int mid = l + r >> 1;
if(check(mid)) r = mid;
else l = mid + 1;
}
return r;
}
};