1
已解决
李奕歌
初级天翼
初级天翼
题目描述 De**ion
输入n个数,要使最大值与最小值之差小于等于d,最少应该删除几个数。
输入描述 Input De**ion
第一行2个数,n和d表示一共n个数,最值之差最大为d
第二行n个数
输出描述 Output De**ion
最少应该删除的数字的数量
样例输入 Sample Input
3 1 2 1 4
样例输出 Sample Output
1
数据范围及提示 Data Size & Hint
n∈[1,200000],d∈[0,1000],每个数∈[1,100000]
李奕歌在2023-02-02 16:51:00追加了内容
大佬们求思路:)
李奕歌在2023-02-02 17:42:56追加了内容
@刘宇航 这么写?
#include "bits/stdc++.h"
#define cin std::cin
#define cout std::cout
using namespace std;
int n,d,a[200005];
int ans=0x3f3f3f3f;
int main(){
cin.tie(0);
cin>>n>>d;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
int m=0x3f3f3f3f,j=0,k=0;
for(int i=1;i<=n;i++){
if(a[i]+d<=m){
m=a[i]+d;
j=i;
}
k=n-(j-i+1);
ans=min(ans,k);
}
cout<<ans<<"\n";
return 0;
}
0
已采纳
汪宇航
新手启示者
新手启示者
你先把它排序,然后遍历每个i,算出a[i]+d,然后设j为最后一个小于等于a[i]+d的数字的下标,然后算k=n-(j-i+1),取k最小值即可
0
0
0
0