在 Python 中最小化数组偏差的程序

假设我们有一个数组 nums。我们可以对数组的任何元素执行任意次数的两种类型的操作

  • 对于偶数元素,将其除以 2

  • 对于奇数元素,乘以 2。

现在数组的偏差是数组中任意两个元素之间的最大差值。我们必须找到数组在执行一定数量的操作后可以具有的最小偏差。因此,如果输入类似于 nums = [6,3,7,22,5],那么输出将是 5,因为我们可以在一个操作 [6,6,7,22,5] 和第二个操作中创建我们的数组操作 [6,6,7,22,10],在另一个操作 [6,6,7,11,10] 中,现在偏差是 11-6 = 5。

示例

让我们看下面的实现来更好地理解

import heapq

def solve(nums):

   nums.sort()

   max_v,min_v = nums[-1],nums[0]

   heapq.heapify(nums)

   res = max_v-min_v

   while nums[0]%2==1:

      v = heapq.heappop(nums)

      v = 2 * v

      heapq.heappush(nums, v)

      min_v = nums[0]

      max_v = max(v, max_v)

      res = min(res, max_v - min_v)

   nums = [-n for n in nums]

   heapq.heapify(nums)

   while nums[0]%2==0:

      v = -heapq.heappop(nums)

      v = v // 2

      heapq.heappush(nums, -v)

      max_v = -nums[0]

      min_v = min(min_v,v)

      res = min(res, max_v - min_v)

   return res

nums = [6,3,7,22,5]

print(solve(nums))

输入

[6,3,7,22,5]
输出结果
5

以上是 在 Python 中最小化数组偏差的程序 的全部内容, 来源链接: utcz.com/z/357661.html

回到顶部