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之路的主要内容,如果未能解决你的问题,请参考以下文章