在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。
为了解决这个问题,我们将按照以下步骤进行 :
- 将列表nums排序
-
max_v:nums的最大元素
-
min_v:nums的最小元素
-
堆化nums
-
res: max_v – min_v
-
当nums [0]为奇数时,执行以下操作
- v:从堆队列nums中弹出的元素
-
v:2 * v
-
将v插入堆队列nums中
-
min_v:nums [0]
-
max_v:v和max_v中的最大值
-
res:res和(max_v – min_v)的最小值
-
nums:n和负数顺序中的所有数字的列表
-
堆化堆队列nums
-
当nums [0]为偶数时,执行以下操作
- v:从堆队列nums中弹出的负数元素
-
v:v // 2的商
-
将-v插入堆队列nums中
-
max_v:-nums [0]
-
min_v:min_v和v的最小值
-
res:res和(max_v – min_v)的最小值
-
返回res
示例
让我们看以下实现以获得更好的理解