Love your solution, so basically arrange heaters on a straight line (x-axis) with increasing distance from origin.

Take each house, put that on x-axis. Look for heater to its right, and look for heater to its left. Find distance between house and the one on left and one on right. The closest heater will warm the house. However heater radius are all common, so took the highest radius as the answer.

Here is a python code inspired by your and @jychstar

class Solution(object):
def findRadius(self, houses, heaters):
"""
:type houses: List[int]
:type heaters: List[int]
:rtype: int
"""
heaters.sort() # O(m*log(m))
heaters = [ -float('inf') ] + heaters + [ float('inf') ]
radius = -1
for house in houses: # O(n))
place = bisect.bisect_left(heaters,house) # O(log(m))
left,right = place-1,place
radiusx = min(abs(house - heaters[left]), abs(heaters[right] - house))
radius = max(radiusx,radius)
return radius

So total complexity is max( O(mlog(m)), O(nlog(n)) )