力扣1984. 学生分数的最小差值
这一题的大意是说给出一个数组和一个正数k,让我们在这个数组中找出k个学生,使得这k个学生中的最高分和最低分的差值是最小的。
那么怎么在数组中找k个人呢? 我们暴力枚举吗? Cnk
不是的,我们通过排序,使得值相近的数尽可能的排在一起,那么我们再用滑动窗口,从左往右滑,每一个窗口的大小是k,那么这个窗口的左右边界之差就是这k个数
字的最小值,然后我们从左往右滑动,遍历完所有的窗口,用每一个窗口的最小值,更小ans,即可找到题目要求的最小值。
class Solution {
public:int minimumDifference(vector<int>& nums, int k) {sort(nums.begin(),nums.end());int n=nums.size();int ans=INT_MAX;for(int i=k-1;i<n;i++){ans=min(ans,nums[i]-nums[i-k+1]);}return ans;}
};
时间复杂度O(n)