题目描述
有n颗大小不一的钻石,现在需要布展,为了视觉效果,你可以去掉其中最多K颗钻石,使得展台上的最大的钻石与最小的钻石差值最小。求解这个最小值
输入格式
第一行,两个整数N和K
接下来N个整数Ai,表示钻石的大小
输出格式
一个整数,展台上最大的钻石与最小的钻石的差值的最小值
输入输出样例
输入样例1:
3 1 1 2 4
输出样例1:
1
说明
1≤N≤100000 1≤Ai≤100000 0≤K<N
【耗时限制】1000ms 【内存限制】128MB
这一题的关键是每次去掉的钻石一定是剩余中最大或最小的(注意!一定会去除k颗钻石,这样才能使相差最小)
代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n,k,a[100010],minn=1e9;
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
for(int i=0;i<=k;i++){
LL sum=abs(a[i+1]-a[n-k+i]);
minn=min(minn,sum);
}
cout<<minn;
return 0;
}
//是不是短的出奇?