用Python找到给定数组中长度为k的数组,其不公平程度最小
假设我们有一个数组A和另一个值k。我们必须形成一个大小为k的数组arr,从A中取出元素并最小化不公平。这里的不公平性通过以下公式计算 –
(max(arr) – min(arr)) – (AVERAGE(arr))
因此,如果输入如下:A = [25, 120, 350, 150, 2500, 25, 35]和k = 3,则输出将为10,因为我们可以取元素[25、25、35],所以max(arr) = 35,min(arr) = 25。因此,它们的差异为10。
要解决这个问题,我们将按照以下步骤执行 –
- i:= 0
- 对列表A进行排序
- n:= A的大小
- m:= A[n-1]
- x:= 0, y:= 0
- 当 i < n-k 时,执行以下操作
- 如果 A[i+k-1]-A[i] < m,则
- m:= A[i+k-1]-A[i]
- i := i + 1
- 如果 A[i+k-1]-A[i] < m,则
- 返回 m
示例
看一下以下实现,以更好地理解 –
def solve(A, k):
i=0
A.sort()
n = len(A)
m=A[n-1]
x=0
y=0
while i<n-k:
if(A[i+k-1]-A[i]<m):
m=A[i+k-1]-A[i]
i+=1
return m
A = [25, 120, 350, 150, 2500, 25, 35]
k = 3
print(solve(A, k))
输入
[25, 120, 350, 150, 2500, 25, 35]
输出
10