问题标题: 酷町堂:5168 最值之差2

1
0
已解决
李奕歌
李奕歌
初级天翼
初级天翼

题目描述 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
我要回答