分数的最小差值

306 阅读1分钟

题目

现有一个下标从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个元素组成的子序列的最大值和最小值的差值,将其与当前最小值比较,更新最小值。最终返回最小值。

今日警句

少壮不努力,老大图伤悲