Day3 475. 供暖器 - 力扣(LeetCode) (leetcode-cn.com)
本题没搞懂
题目
冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。
在加热器的加热半径范围内的每个房屋都可以获得供暖。
现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。
示例 1:
输入: houses = [1,2,3], heaters = [2]输出: 1解释: 仅在位置2上有一个供暖器。如果我们将加热半径设为1,那么所有房屋就都能得到供暖。
示例 2:
输入: houses = [1,2,3,4], heaters = [1,4]输出: 1解释: 在位置1, 4上有两个供暖器。我们需要将加热半径设为1,这样所有房屋就都能得到供暖。
示例 3:
输入:houses = [1,5], heaters = [2]输出:3
提示:
1 <= houses.length, heaters.length <= 3 * 1041 <= houses[i], heaters[i] <= 109贴几个答案
```python
class Solution:
def findRadius(self, houses: List[int], heaters: List[int]) -> int:heaters = heaters + [-inf, inf]houses.sort()heaters.sort()i, j, ans = 0, 0, 0while i < len(houses):cur = infwhile heaters[j] <= houses[i]:cur = houses[i] - heaters[j]j += 1cur = min(cur, heaters[j] - houses[i])ans = max(cur, ans)i += 1j -= 1return ans

```python
class Solution:
def findRadius(self, houses: List[int], heaters: List[int]) -> int:
houses.sort()
heaters.append(float("-inf"))
heaters.append(float("inf"))
heaters.sort()
n1, n2 = len(houses), len(heaters)
ans = 0
i, j = 0, 1
while i < n1 and j < n2:
if houses[i] == heaters[j]:
i += 1
j += 1
elif houses[i] < heaters[j]:
ans = max(ans, min(heaters[j] - houses[i], houses[i] - heaters[j-1]))
i += 1
else:
j += 1
return ans
我看不懂这些大佬解法,我只会暴力解法
只不过超时了….(
…..我的一个案例运行6000ms, 大佬30个案例运行84ms…..
class Solution:
def findRadius(self, houses: List[int], heaters: List[int]) -> int:
single_list = []
for i in houses:
temp = []
for n in heaters:
ans = abs(i - n)
temp.append(ans)
single_list.append(min(temp))
return max(single_list)
笔记
- inf表示的是 无穷 大 / 小
- 其他的代码看不懂,以后再说.
