难度级别:简单

描述

给你一个 下标从 0 开始 的整数数组 nums ,其中 nums[i] 表示第 i 名学生的分数。另给你一个整数 k 。从数组中选出任意 k 名学生的分数,使这 k 个分数间 最高分最低分差值 达到 最小化
返回可能的 最小差值

示例 1:

  1. 输入:nums = [90], k = 1
  2. 输出:0
  3. 解释:选出 1 名学生的分数,仅有 1 种方法:
  4. - [90] 最高分和最低分之间的差值是 90 - 90 = 0
  5. 可能的最小差值是 0

示例 2:

输入:nums = [9,4,1,7], k = 2
输出:2
解释:选出 2 名学生的分数,有 6 种方法:
- [9,4,1,7] 最高分和最低分之间的差值是 9 - 4 = 5
- [9,4,1,7] 最高分和最低分之间的差值是 9 - 1 = 8
- [9,4,1,7] 最高分和最低分之间的差值是 9 - 7 = 2
- [9,4,1,7] 最高分和最低分之间的差值是 4 - 1 = 3
- [9,4,1,7] 最高分和最低分之间的差值是 7 - 4 = 3
- [9,4,1,7] 最高分和最低分之间的差值是 7 - 1 = 6
可能的最小差值是 2

提示:

  • 1 <= k <= nums.length <= 1000
  • 0 <= nums[i] <= 105

题解

题目中要求 k 个数值中最大值和最小值的差值 “最小化”,即这 k 个数值的大小要尽可能接近。

所以,我们可以先将整个数组做个排序,然后依次截取其中的 k 个数值,并找出其中的最小差值。

代码实现:

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
const minimumDifference = function(nums, k) {
    if (k === 1) {
        return 0
    }
    const sortNums = nums.sort(function (a, b) {
        return a - b
    })
    const len = sortNums.length
    let minDiff = sortNums[k - 1] - sortNums[0]
    for (let i = 1; i <= len - k; i++) {
        const tempDiff = sortNums[i + k - 1] - sortNums[i]
        if (tempDiff < minDiff) {
            minDiff = tempDiff
        }
    }
    return minDiff
};