Leetcode-475

Heaters

Time complexity: $O((m+n)\log n)$

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <vector>
#include <algorithm>

class Solution {
public:
    int findRadius(std::vector<int>& houses, std::vector<int>& heaters) {
        std::sort(heaters.begin(), heaters.end());
        int n = heaters.size();
        int max_dist = 0, dist;
        for (int house : houses) {
            int j = std::lower_bound(heaters.begin(), heaters.end(), house) - heaters.begin();
            dist = 0x3fff'ffff;
            if (j < n) {
                dist = heaters[j] - house;
            }
            if (j) {
                dist = std::min(dist, house - heaters[j - 1]);
            }
            max_dist = std::max(dist, max_dist);
        }
        return max_dist;
    }
};

Leetcode-475