475. Heaters

 1 static int wing=[]()
 2 {
 3     std::ios::sync_with_stdio(false);
 4     cin.tie(NULL);
 5     return 0;
 6 }();
 7 
 8 class Solution 
 9 {
10 public:
11     int findRadius(vector<int>& houses, vector<int>& heaters) 
12     {
13         sort(heaters.begin(),heaters.end());
14         int minRadius=0;
15         int szHouses=houses.size();
16         for(int i=0;i<szHouses;i++)
17         {
18             int curRadius=INT_MAX;
19             auto larger=lower_bound(heaters.begin(),heaters.end(),houses[i]);
20             if(larger!=heaters.end())
21                 curRadius=*larger-houses[i];
22             if(larger!=heaters.begin())
23             {
24                 auto smaller=larger-1;
25                 curRadius=min(curRadius,houses[i]-*smaller);
26             }
27             minRadius=max(minRadius,curRadius);
28         }
29         return minRadius;
30     }
31 };

找最小热源半径,扫描房屋数组,找到所有房屋被最近热源覆盖所需要的热源半径,取这些所有半径的最大值即可。

值得注意的是两头的情况和中间额情况不同,一个房屋两侧都有热源时,要取两边覆盖半径的较小值。

猜你喜欢

转载自www.cnblogs.com/zhuangbijingdeboke/p/9117588.html