学生分数的最小差值
给你一个 下标从 0 开始 的整数数组 nums ,其中 nums[i] 表示第 i 名学生的分数。另给你一个整数 k 。
从数组中选出任意 k 名学生的分数,使这 k 个分数间 最高分 和 最低分 的 差值 达到 最小化 。
返回可能的 最小差值
输入: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。
public int minimumDifference(int[] nums, int k) {
//冒泡排序,先将数组进行排序
for (int i = 0; i <nums.length-1 ; i++) {
for (int j = 0; j <nums.length-1-i ; j++) {
if(nums[j]>nums[j+1]){
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
//新建数组来获取数据
int[] nums1 = new int[k];
int min = nums[nums.length-1] - nums[0];
//因为排序之后分差是最少的,所以想法是将排序后的数组截取k个值放到新数组中,初始化
最小值为原数组最大分差,对每个截取的数组进行比较,如果最小值比其原先要小则替换。
for (int i = 0; i < nums.length - nums1.length + 1 ; i++) {
for (int j = i; j <i + nums1.length ; j++) {
nums1[j-i] = nums[j];
}
if (min > nums1[nums1.length-1] - nums1[0]) {
min = nums1[nums1.length-1] - nums1[0];
}
}
return min ;
}
}