LeetCode 475 供暖器[二分 排序] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 475 供暖器[二分 排序] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。


解题思路:
本题实质上是求解每个房屋到达最近供暖器的最远距离,也就是在所有最近距离中找最大的,首先对供暖期位置排序,接着遍历每个房屋,用二分法寻找每个房屋左右的供暖器(可能没有,需要讨论),然后更新最大距离,代码如下:

class Solution 
public:
    int findRadius(vector<int>& houses, vector<int>& heaters) 
        sort(heaters.begin(), heaters.end());
        int max_r = 0;
        for(auto& house : houses) 
            // 右、左供暖器
            int right = upper_bound(heaters.begin(), heaters.end(), house) - heaters.begin();
            int left = right - 1;
            // 右边距离,没有就INT_MAX
            int rightDistance = right >= heaters.size() ? INT_MAX : heaters[right] - house;
            // 左边距离,没有就INT_MAX
            int leftDistance = left < 0 ? INT_MAX : house - heaters[left];
            int curDistance = min(leftDistance, rightDistance);
            max_r = max(max_r, min(leftDistance, rightDistance));
        
        return max_r;
    
;

时间复杂度:O((n + m)logn)
空间复杂度:O(logn)

PS:m为houses长度,n为heaters的长度,时间复杂度是排序时间nlogn和遍历二分时间mlogn之和,空间复杂度主要在排序部分。

以上是关于LeetCode 475 供暖器[二分 排序] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 工作每日一题 475. 供暖器 (二分 stl)

leetcode每日一题(475.供暖器)

二分供暖器

leetcode 475. 供暖器(Heaters)

Leetcode 475.供暖气

LeetCode 997. 找到小镇的法官 / 475. 供暖器 / 1154. 一年中的第几天