题目
现有一个下标从0开始的整数数组nums,其中nums[i]表示第i名学生的分数。另外一个整数k。 从数组中选出任意k名学生的分数,使这k个分数间最高分和最低分的差值达到最小化返回可能的最小差值
代码实现
public int minimumDifference(int[] nums, int k) {
Arrays.sort(nums);
int minValue = nums[k - 1] - nums[0];
for (int i = k; i < nums.length; i++) {
minValue = Math.min(minValue, nums[i] - nums[i - k + 1]);
}
return minValue;
}
代码分析
首先对整个数组进行排序,然后找到第一个长度为k的子序列,计算该子序列的最大值和最小值的差值,将此值设为当前最小值。接着,从第k个元素开始,遍历整个数组,每次计算当前元素和前面k-1个元素组成的子序列的最大值和最小值的差值,将其与当前最小值比较,更新最小值。最终返回最小值。
今日警句
少壮不努力,老大图伤悲