题目解析
题目给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,要求找出并返回可以覆盖所有房屋的最小加热半径。
因此整体采用滑动窗口思想:
- 在加热器数量大于一的情况下对房屋及加热器分别排序
- 利用一个数组记录每个房屋到前一个加热器和后一个加热器距离最近的值。
- 对于所有房屋取距离最大值,即为结果。
代码
class Solution(object):
def findRadius(self, houses, heaters):
res=[]
if len (heaters)==1:
for h in houses:
res.append(abs(h-heaters[0]))
return max(res)
houses.sort()
heaters.sort()
i=1
for j in range(len(houses)):
while i<len(heaters)-1 and heaters[i]<houses[j]:
i+=1
res.append(min(abs(heaters[i]-houses[j]),abs(heaters[i-1]-houses[j])))
return max(res)