Java实现学生分数的最小差值
01 分类
- 数组
02 题目
给你一个 下标从 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 <= 1000
0 <= nums[i] <= 105
03 我的题解
public class Test01 {public static void main(String[] args) {//测试数据int[] nums =new int[] {9,4,1,7};int k = 2; System.out.println(numk(nums, k));}public static int numk(int[] nums ,int k) {int min=100000000;//初始化最小差值,足够大这样无论测试数据结果多大都可以更小Arrays.sort(nums);//排序数组if (k==1) {//当k为1是,差值为0return 0;}for (int i = 0; i < nums.length; i++) {//在排序后的数值中才能找到最小差值if (k>1&&i+k-1<nums.length) {//排序后的数据间隔在原数组中最小,以第i+k为上限,第i为下限取值if (min>nums[i+k-1]-nums[i]) {min=nums[i+k-1]-nums[i];//循环取值直到最小差值}}}return min;}}