1. 程式人生 > >475.供暖器

475.供暖器

冬季已經來臨。 你的任務是設計一個有固定加熱半徑的供暖器向所有房屋供暖。

現在,給出位於一條水平線上的房屋和供暖器的位置,找到可以覆蓋所有房屋的最小加熱半徑。

所以,你的輸入將會是房屋和供暖器的位置。你將輸出供暖器的最小加熱半徑。

說明:

  1. 給出的房屋和供暖器的數目是非負數且不會超過 25000。
  2. 給出的房屋和供暖器的位置均是非負數且不會超過10^9。
  3. 只要房屋位於供暖器的半徑內(包括在邊緣上),它就可以得到供暖。
  4. 所有供暖器都遵循你的半徑標準,加熱的半徑也一樣。

示例 1:

輸入: [1,2,3],[2]
輸出: 1
解釋: 僅在位置2上有一個供暖器。如果我們將加熱半徑設為1,那麼所有房屋就都能得到供暖。

示例 2:

輸入: [1,2,3,4],[1,4]
輸出: 1
解釋: 在位置1, 4上有兩個供暖器。我們需要將加熱半徑設為1,這樣所有房屋就都能得到供暖。

class Solution {
public:
    int findRadius(vector<int>& houses, vector<int>& heaters) {
        int n = heaters.size(), j = 0, res = 0;
        sort(houses.begin(), houses.end());
        sort(heaters.begin(), heaters.end());
        for (int i = 0; i < houses.size(); ++i) {
            int cur = houses[i];
            while (j < n - 1 && abs(heaters[j + 1] - cur) <= abs(heaters[j] - cur)) {
                ++j;
            }
            res = max(res, abs(heaters[j] - cur));
        }
        return res;
    }
};