2020-02-06
1.题目描述
输入房屋和供暖器的位置,输出供暖器的最小加热半径
2.题解
供暖器覆盖了所有房屋相当于每个房屋在最小加热半径内都有供暖器即可,首先求出每一个房屋与
最近供暖器的距离,然后求出所有最小值的最大值即可。
3.代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
int findRadius(vector<int>& houses, vector<int>& heaters) {
sort(houses.begin(),houses.end());
sort(heaters.begin(),heaters.end());
int l1=houses.size(),l2=heaters.size();
int x[25010],mm;
for (int i=0;i<l1;i++){
mm=0x7fffffff;
int j=0;
while (j<l2&&houses[i]>=heaters[j]) j++;
if (j-1>=0) mm=min(mm,houses[i]-heaters[j-1]);
if (j<l2) mm=min(mm,heaters[j]-houses[i]);
x[i]=mm;
}
mm=0;
for (int i=0;i<l1;i++){
mm=max(mm,x[i]);
}
return mm;
}
};
int main(){
Solution s;
int a[4]={1,2,3,4},b[2]={1,4};
vector<int>v1(a,a+4),v2(b,b+2);
cout<<s.findRadius(v1,v2)<<endl;
return 0;
}