难度级别:简单
描述
给你一个 下标从 0 开始 的整数数组 nums ,其中 nums[i] 表示第 i 名学生的分数。另给你一个整数 k 。从数组中选出任意 k 名学生的分数,使这 k 个分数间 最高分 和 最低分 的 差值 达到 最小化 。
返回可能的 最小差值 。
示例 1:
输入:nums = [90], k = 1输出:0解释:选出 1 名学生的分数,仅有 1 种方法:- [90] 最高分和最低分之间的差值是 90 - 90 = 0可能的最小差值是 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 <= 10000 <= 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
};
