用Python查找最小半径以照亮街道上所有房屋的程序
假设我们有一个称为nums的数字列表,代表一维房屋的位置。现在考虑我们有3条路灯,我们可以将其放在线路上的任何位置,位置x处的灯照亮[x-r,x+r]范围内的所有房屋。我们必须找到点亮所有房屋所需的最小r。
因此,如果输入像nums=[4,5,6,7],那么输出将是0.5,因为我们可以将灯放在4.5、5.5和6.5上,所以r=0.5。因此,这三盏灯可以点亮所有4栋房屋。
在线示例
让我们看下面的实现以更好地理解-
class Solution: def solve(self, nums): def valid(r): last_location = nums[0] + r count = 1 for i in range(len(nums)): val = nums[i] if val - last_location > r: count += 1 last_location = val + r return count <= 3 nums.sort() left = 0 right = nums[-1] res = float("inf") itr = 0 while left <= right and itr < 20: mid = left + (right - left) / 2 if valid(mid): res = min(res, mid) right = mid else: left = mid itr += 1 return res ob = Solution() nums = [4,5,6,7] print(ob.solve(nums))
输入值
[4,5,6,7]输出结果
0.5