Python程序:从给定数组中查找长度为k且不公平性最小的数组
假设我们有一个数组A和另一个值k。我们必须从A中选取元素组成一个大小为k的数组arr,并使不公平性最小化。这里的不公平性由以下公式计算:
(arr的最大值) - (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
广告