用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

猜你喜欢