📅  最后修改于: 2023-12-03 14:56:40.717000             🧑  作者: Mango
这是RD Sharma解决方案的第12类,涉及到最大值和最小值的计算。
对于一个数列$A$,长度为$n$,从中选出$k$个数,记为$B$。现在需要找到$B$中最大值和最小值的差的最小值。
首先将数列$A$排序,假设排序后的数列为$S$。然后依次取出$S$中长度为$k$的子序列,分别求出其最大值和最小值的差,并计算最小差值。
具体而言,可以使用两个指针$i$、$j$,$i$从$1$到$n-k+1$,$j$从$i+k-1$到$n$,分别取$S[i:j]$作为$B$,求其最大值和最小值的差,统计最小的差值即可。
代码如下:
def min_diff_k(a, k):
a.sort()
n = len(a)
min_diff = a[k-1] - a[0]
for i in range(1, n-k+2):
j = i+k-1
diff = a[j-1] - a[i]
if diff < min_diff:
min_diff = diff
return min_diff
a = [5, 3, 8, 6, 2]
k = 3
assert min_diff_k(a, k) == 2
a = [2, 5, 3, 7, 6, 1]
k = 4
assert min_diff_k(a, k) == 3
以上是本题的解题思路和代码实现。