📌  相关文章
📜  第12类RD Sharma解决方案–第18章,最大值和最小值–练习18.2(1)

📅  最后修改于: 2023-12-03 14:56:40.717000             🧑  作者: Mango

RD Sharma解决方案–第18章,最大值和最小值–练习18.2

这是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

以上是本题的解题思路和代码实现。