2021年又要过去了,下午实验室要年终汇报,一年来感觉收获寥寥,充满了遗憾,写论文写得烦躁,
还是刷道题吧。
不过想了一会儿,没想到最优解,于是用二分写了个超时版本:判断radius 是否可以完成供暖,遍历heaters , 记录每个heaters 可以供暖的范围,最后遍历houses,判断是否所有house在供暖区间内
写完超时版本,看了看答案思路,有时间再实现一下。
希望能坚持每日一题吧
class Solution {
public:
bool isHeat(vector<int> & houses, vector<int> & heaters, int radius) {
int sz = houses.size();
vector<vector<int>> mp;
for(auto h: heaters) {
mp.push_back({max(houses[0],h-radius), min(h + radius, houses[sz-1])});
}
sort(mp.begin(),mp.end(),[&](auto a, auto b){
if(a[0] == b[0]) return a[1] < b[1];
return a[0]< b[0];
});
for(auto house : houses) {
int flag = 0;
for(auto m : mp) {
int a = m[0];
int b = m[1];
if(house >= a && house <= b) {
flag = 1;
break;
}
}
if(flag == 0)
return false;
}
return true;
}
int findRadius(vector<int>& houses, vector<int>& heaters) {
sort(houses.begin(), houses.end());
int max_radius = 1e9;
int left = 0;
int right = max_radius;
while(left < right) {
int mid = left + (right - left) /2;
if(isHeat(houses, heaters, mid)) {
right = mid;
}
else {
left = mid + 1;
}
}
return left;
}
};