- 题目
- 思路
- 代码
给你一个 下标从 0 开始 的整数数组 nums ,其中 nums[i] 表示第 i 名学生的分数。另给你一个整数 k 。
从数组中选出任意 k 名学生的分数,使这 k 个分数间 最高分 和 最低分 的 差值 达到 最小化 。
返回可能的 最小差值 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-difference-between-highest-and-lowest-of-k-scores
- 设定两个指针i和j分别代表窗口的左右区间,并设置一个初始最大差值。
- 一开始是一个空窗口,所以i=0,j=-1;
- 不断滑动窗口的右区间的值,当窗口长度大于k时,滑动左区间的值;
- 当窗口长度为k时,计算最大值和最小值的差值,并跟第1步中设置的初试最大差值比较,保留较小者。
- 返回最小的差值。
class Solution {
public int minimumDifference(int[] nums, int k) {
// 题目中提示: 0 <= nums[i] <= 10^5
int min = 100000;
// 先排序
Arrays.sort(nums);
int i = 0;
int j = -1;
while(j < nums.length - 1){
j++;
if(j - i + 1 > k){
// 移动右边的窗口
i++;
}
if(j - i + 1 == k){
// 计算最高分和最低分的差值
min = Math.min(min,nums[j] - nums[i]);
}
}
return min;
}
}



