Java实现学生分数的最小差值

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是,差值为0
			return 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;
	}

}

猜你喜欢

转载自blog.csdn.net/2302_77182979/article/details/134756133